<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent Jia 博客

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      29 隨筆 :: 3 文章 :: 0 評論 :: 0 Trackbacks
    LinkedHashSet是JDK 1.4中引入的新的集合類(LinkedHashMap也是同期引入)。 LinkedHashSet,顧名思義,就是在Hash的實現上添加了Linked的支持。對于LinkedHashSet,在每個節點上通過一個鏈表串聯起來,這樣,就可以保證確定的順序。對于希望有常量復雜度的高效存取性能要求、同時又要求排序的情況下,可以直接使用LinkedHashSet。

    它實現了Set接口。存入Set的每個元素必須是唯一的,因為Set不保存重復元素。但是Set接口不保證維護元素的次序(那里面的元素每次順序如何確定?TODO)。Set與Collection有完全一樣的接口Iterable,同時Set繼承了Collection。

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

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

    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去除了重復,又使用linked保持住了原順序。

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

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


    如上兩種方法的效率比較,設為TODO,
    1, 利用set.add(element)方法,本質是利用其contains()方法判斷,而contains()的本質就是遍歷。
    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, 測試數據,可以使用數據量:1W,5W,10W,100W。

    posted on 2012-07-06 11:54 iLinux 閱讀(6221) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 黄色a三级免费看| 国产亚洲Av综合人人澡精品| 国产男女爽爽爽免费视频| 日本高清免费中文字幕不卡| 亚洲七久久之综合七久久| 国内免费高清在线观看| 亚洲一区二区三区丝袜| 免费无码A片一区二三区| 亚洲熟妇成人精品一区| 在线免费观看一级片| 亚洲国产欧美一区二区三区| 免费国产a国产片高清| 九九免费久久这里有精品23| 亚洲国产无套无码av电影| 国产无遮挡裸体免费视频在线观看| 国产亚洲人成无码网在线观看| 免费国产叼嘿视频大全网站| 亚洲网站免费观看| 性感美女视频在线观看免费精品| 国产成人亚洲精品蜜芽影院| 久久久久亚洲精品无码网址 | 老司机亚洲精品影院| 亚洲免费一级视频| 亚洲人成网站999久久久综合| 国产一区二区视频免费| 两个人的视频www免费| 亚洲第一精品电影网| 午夜色a大片在线观看免费| h视频在线免费观看| 亚洲精品视频在线观看视频| 在线视频免费国产成人| 免费精品久久天干天干| 亚洲卡一卡二卡乱码新区| 亚洲午夜成人精品电影在线观看| 男女午夜24式免费视频| 亚洲 欧洲 视频 伦小说| 在线观看国产区亚洲一区成人 | 亚洲激情校园春色| 免费大黄网站在线观| 3344永久在线观看视频免费首页 | 亚洲人成电影福利在线播放 |