Vincent Jia 博客

          to be a better man, to be a bad man.

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            29 隨筆 :: 3 文章 :: 0 評(píng)論 :: 0 Trackbacks

          2012年7月6日 #

          2016年,收獲了什么,失去了什么。 
          博客沒(méi)有寫作。
          國(guó)家大事件幾多。
          posted @ 2017-12-04 16:53 iLinux 閱讀(221) | 評(píng)論 (0)編輯 收藏

          The Collections Framework







          The collections framework is a unified architecture for representing and manipulating collections, allowing them to be manipulated independently of the details of their representation. It reduces programming effort while increasing performance. It allows for interoperability among unrelated APIs, reduces effort in designing and learning new APIs, and fosters software reuse. The framework is based on fourteen collection interfaces. It includes implementations of these interfaces, and algorithms to manipulate them.
          Overview
          • Overview - An overview of the Collections framework.
          API Specification
          • API Reference - An annotated outline of the classes and interfaces comprising the collections framework, with links into the JavaDoc.
          Tutorials and Programmer's Guides
          • Tutorial - A tutorial introduction to the collections framework with plenty of programming examples.
          API EnhancementsMore Information
          • Design FAQ- Answers to frequently asked questions concerning the design of the collections framework.

          From: http://docs.oracle.com/javase/6/docs/technotes/guides/collections/index.html
          posted @ 2012-07-06 16:15 iLinux 閱讀(283) | 評(píng)論 (0)編輯 收藏

          API Enhancements

          posted @ 2012-07-06 16:14 iLinux 閱讀(285) | 評(píng)論 (0)編輯 收藏

          LinkedHashSet是JDK 1.4中引入的新的集合類(LinkedHashMap也是同期引入)。 LinkedHashSet,顧名思義,就是在Hash的實(shí)現(xiàn)上添加了Linked的支持。對(duì)于LinkedHashSet,在每個(gè)節(jié)點(diǎn)上通過(guò)一個(gè)鏈表串聯(lián)起來(lái),這樣,就可以保證確定的順序。對(duì)于希望有常量復(fù)雜度的高效存取性能要求、同時(shí)又要求排序的情況下,可以直接使用LinkedHashSet。

          它實(shí)現(xiàn)了Set接口。存入Set的每個(gè)元素必須是唯一的,因?yàn)镾et不保存重復(fù)元素。但是Set接口不保證維護(hù)元素的次序(那里面的元素每次順序如何確定?TODO)。Set與Collection有完全一樣的接口Iterable,同時(shí)Set繼承了Collection。

          LinkedHashSet具有HashSet的查詢速度,且內(nèi)部使用鏈表維護(hù)元素的順序(插入的順序),于是在使用迭代器便利Set時(shí),結(jié)果會(huì)按元素插入的次序顯示。

          需求如: 含多個(gè)(有重復(fù))元素ArrayList,去除重復(fù)。

          1, 可以使用如下略顯冗余的代碼:
           1 public static List removeDuplicateWithOrder(List list) {
           2         Set set = new HashSet();
           3         List newList = new ArrayList();
           4         for (Iterator iter = list.iterator(); iter.hasNext();) {
           5             Object element = iter.next();
           6             if (set.add(element))
           7                 newList.add(element);
           8         }
           9         return newList;
          10     }
          此方法有濫用set之嫌。

          2, 我們也可以使用本文章中提及的LinkedHashSet:
          return new ArrayList<T>(new LinkedHashSet<T>(list));
          此方法,既利用set去除了重復(fù),又使用linked保持住了原順序。

          3, 貌似apache commons lang中有專門去重復(fù)的集合工具。

          這兒的鏈表操作是常量級(jí)的,這也是LinkedHashSet/LinkedHashMap比TreeSet/TreeMap性能更高的原因。當(dāng)然,LinkedHashSet不是thread-safe的,在多線程環(huán)境下,需要進(jìn)行同步包裝:
          Collections.synchronizedCollection(Collection);
          or:
          Collections.synchronizedSet(Set);
          在使用LinkedHashSet的iterator()方法遍歷元素時(shí),如果其他線程有讀取操作,也要進(jìn)行同步,否則,就會(huì)拋出同其它fail-fast一樣的由于刪除或增加操作而引起的CurrentModificationException。


          如上兩種方法的效率比較,設(shè)為TODO,
          1, 利用set.add(element)方法,本質(zhì)是利用其contains()方法判斷,而contains()的本質(zhì)就是遍歷。
          JDK doc中寫道:
          More formally, adds the specified element e to this set if the set contains no element e2 such that (e==null ? e2==null : e.equals(e2)). If this set already contains the element, the call leaves the set unchanged and returns false. In combination with the restriction on constructors, this ensures that sets never contain duplicate elements.
          2, 測(cè)試數(shù)據(jù),可以使用數(shù)據(jù)量:1W,5W,10W,100W。

          posted @ 2012-07-06 11:54 iLinux 閱讀(6227) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 文安县| 马公市| 绥棱县| 康马县| 沂水县| 乃东县| 五台县| 雅安市| 平谷区| 兴和县| 胶州市| 邓州市| 卢龙县| 图木舒克市| 英山县| 信宜市| 兴山县| 巨野县| 集安市| 辽宁省| 红桥区| 贵州省| 上饶市| 历史| 石棉县| 渑池县| 佳木斯市| 左贡县| 肇源县| 高州市| 台中县| 洪泽县| 云林县| 灌南县| 金乡县| 陇西县| 新乡市| 武冈市| 荣昌县| 彝良县| 万源市|