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

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

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

    隨筆 - 22, 文章 - 0, 評論 - 1, 引用 - 0
    數據加載中……

    java集合框架印象

    http://docs.oracle.com/javase/6/docs/technotes/guides/collections/overview.html
    集合框架層次上比較復雜,網上有無數文字和圖片來說明,這里按我的思路整理了一下:
    省略了AbstractCollection,AbstractList等層次的抽象類
    省略了RoleList等javax包中的應用方向的實現
    省略了Vector,Stack,HashTable這些著名的老家伙。
    按照我的一般認識進行歸類,例如LinkedList同時實現了Deque和List,這里歸入List中;再例如Deque本應繼承自Queue,但這里放在同一個級別上。
    一切都是為了盡可能建立一個較清晰的第一印象,知道該在什么場景下使用什么類。
    -------------------------------------------------
    Collection 集合接口(傳統包util)
    Queue 隊列
    PriorityQueue 無界優先級隊列
    Deque 雙端隊列
    ArrayDeque 基于數組的無界雙端隊列,做隊列和棧都很合適
    List 有序集合
    ArrayList 基于數組的有序集合
    LinkedList 基于鏈表的有序結合(其實也是一個Deque)
    Set
    EnumSet 枚舉專用的set,效率高
    HashSet 基本的快速哈希Set,基于HashMap
    LinkedHashSet 附加了鏈表的哈希Set,插入慢,迭代快,有序
    TreeSet 插入時就維持順序,基于TreeMap實現,可快速獲取子集
    總結:
    棧和隊列,用ArrayDeque或者linkedList(各有千秋);其余類的適應范圍都比較明確。
    -------------------------------------------------
    Collection 集合接口(并發包concurrent)
    Queue 隊列
    ConcurrentLinkedQueue 基于鏈接節點的無界線程安全隊列
    BlockingQueue 阻塞隊列
    ArrayBlockingQueue 基于數組的有界阻塞隊列
    DelayQueue 無界阻塞隊列,只有在延遲期滿時才能從中提取元素
    LinkedBlockingQueue 基于鏈表的無界阻塞隊列
    PriorityBlockingQueue 帶優先級的無界阻塞隊列
    SynchronousQueue 無容量的同步隊列,兩個線程插入與移除交替進行
    Deque 雙端隊列
    BlockingDeque 阻塞雙端隊列
    LinkedBlockingDeque 基于鏈表的阻塞雙端隊列
    List 有序集合
    CopyOnWriteArrayList 可變操作通過底層復制來實現,適合多讀取,少修改
    Set
    ConcurrentSkipListSet 多線程可以安全地發執行各種操作,迭代器弱一致
    CopyOnWriteArraySet 可變操作通過底層復制來實現,適合多讀取,少修改
    總結:
    1,ConcurrentLinkedQueue與LinkedBlockingQueue:
    http://www.javacodegeeks.com/2010/09/java-best-practices-queue-battle-and.html#ixzz1seaiSLwp
    如果生產者與消費者的關系是“多對多”,選LinkedBlockingQueue(阻塞方式)要快很多,代價是迭代遍歷的效率奇低。
    如果生產者與消費者的關系是“一對多”或者“多對一”,選ConcurrentLinkedQueue(無等待方式)會有一定性能提升。
    2,ArrayBlockingQueue比LinkedBlockingQueue的表現更穩定和更可預測,但是后者的吞吐量往往更高。
    3,List:
    CopyOnWriteArrayList貌似只適合“多讀取,少寫入”的場景,其余情況還是乖乖的Collections.synchronizedList()吧。
    4,Set:
    ConcurrentSkipListSet可以當作并發版的TreeSet。
    CopyOnWriteArraySet可以當作并發版的linkedHashSet,適合多讀取,少修改。
    奇怪的是java沒有提供ConcurrentHashSet,按理說基于ConcurrentHashMap可以實現的。
    讀寫都頻繁的同步Set只能湊合了,用ConcurrentSkipListSet可能比synchronizedSet要強?
    http://dhruba.name/2009/08/05/concurrent-set-implementations-in-java-6/
    按上面的鏈接說法,可以試試這個:
    Collections.newSetFromMap(new ConcurrentHashMap<Object,Boolean>())
    Use this when you have large sets, a good (and fast) hash function and can estimate the set size and needed concurrency before creating the map.
    -------------------------------------------------
    Map 映射接口 (傳統包util)
    EnumMap 枚舉專用的map,效率高
    HashMap 基本的快速哈希表
    LinkedHashMap 附加了鏈表的哈希表,插入慢,迭代快,有序
    IdentityHashMap 實現中用“==”運算代替“equals()”作為判斷鍵和值是否相等
    TreeMap 基于紅黑樹,插入時就維持順序,可快速獲取子集
    WeakHashMap 以“弱鍵”實現,其中的鍵可能會被垃圾回收,導致此映射被移除
    -------------------------------------------------
    Map 映射接口 (并發包concurrent)
    ConcurrentMap
    ConcurrentHashMap
    ConcurrentSkipListMap
    總結:
    ConcurrentHashMap可以當作并發版的HashMap
    ConcurrentSkipListMap可以當作并發版的TreeMap
    -------------------------------------------------
    How to choose which Java collection class to use?
    http://www.javamex.com/tutorials/collections/how_to_choose_2.shtml
    the Queue interface
    http://www.javamex.com/tutorials/synchronization_concurrency_8_queues_2.shtml
    -------------------------------------------------
    吐槽:不知道“基于數組的無界雙端隊列”這句話中的“無界”會不會被敏感掉,想起了“十六嘴交換機”的故事。

    posted on 2012-08-27 01:26 王星游 閱讀(728) 評論(0)  編輯  收藏 所屬分類: java

    主站蜘蛛池模板: 污污视频免费观看网站| 亚洲综合久久成人69| 波多野结衣在线免费观看| 亚洲va久久久噜噜噜久久男同| 亚洲视频在线免费| 中文字幕亚洲不卡在线亚瑟| www在线观看播放免费视频日本| 亚洲AV无码一区二区三区国产| 一级白嫩美女毛片免费| 又大又硬又爽又粗又快的视频免费| 亚洲AV乱码一区二区三区林ゆな| 久久久久成人片免费观看蜜芽| 亚洲综合一区二区精品导航| 波多野结衣在线免费视频| 亚洲AV永久无码精品放毛片| 无码欧精品亚洲日韩一区夜夜嗨 | 麻豆精品成人免费国产片| 亚洲人成网亚洲欧洲无码久久| 99精品视频在线观看免费| 亚洲精品综合一二三区在线| 中文字幕免费视频| 亚洲天堂免费在线| 又粗又硬又黄又爽的免费视频| 国产精品综合专区中文字幕免费播放| 国产亚洲精品免费视频播放| 一级毛片免费观看不卡的| 亚洲伊人精品综合在合线| 国产精品无码一二区免费 | 亚洲一区二区三区免费| 你懂得的在线观看免费视频| 亚洲福利在线观看| 蜜臀91精品国产免费观看| 国产日韩精品无码区免费专区国产| 日韩亚洲AV无码一区二区不卡| 四虎永久在线精品免费网址| 一区在线免费观看| 亚洲国产精品一区二区久| 亚洲成a人片在线观看国产| 久久国产精品免费看| 国产亚洲一卡2卡3卡4卡新区| 国精无码欧精品亚洲一区|