zoukankan      html  css  js  c++  java
  • Java Collection Framework 备忘点

    最顶端是两个接口,集合和映射——  Collection<T>  /  Map<K, V>

    List 列表        保持插入顺序

      ArrayList      擅长随机读

      LinkedList       增、删

      Arrays$ArrayList    定长List,功能有限

    Set

      HashSet      查找最快

      TreeSet       升序排序

      LinkedHashSet   保持插入顺序

    Queue 队列

      LinkedList     也实现了Queue接口,

      PriorityQueue    保持插入顺序

    Map 映射

      HashMap     散列映射,速度最快

      LinkedHashMap  保持插入顺序

      WeakHashMap   键不再使用时,值回报GC

      TreeMap      升序排序

    根据词缀总结一下

    List和带“Linked”的实现都能保持插入顺序。

    带"Hash"的实现速度都比较快,特别是读。

    带“Tree”的实现都能在插入是进行排序。

    以下的实现几乎没有理由再去使用

      Vector   最旧的List实现。几乎每个对外方法都是synchronized的,内部数组每次扩容时增长一倍,而不是像ArrayList一样增长50%。

      Hashtable  最旧的Map实现。几乎每个对外方法都是synchronized的,使用Enumeration进行迭代,contains性能太差。

      Stack    废弃API,LinkedList完全可以取代它。

    选择哪个实现?

      List    默认选择ArrayList,需要大规模的增删时,选择LinkedList,需要线程安全时,选择Collections.synchronizedList()。

      Set    默认选择HashSet,对排序、保持插入顺序有需求时,按需选择,需要线程安全时,选择Collections.synchronizedSet()或Collections.synchronizedSortSet(),

      Queue   默认选择LinkedList,对保持插入顺序有需求时,选择PriorityQueue。

      Map    默认选择HashMap,对排序、保持插入顺序有需求时,按需选择,需要线程安全时,选择Collections.synchronizedMap()或Collections.synchronizedSortMap(),

    线程相关的三种版本

    synchronizedMap为整个散列表加锁;ConcurrentHashMap采用分段锁,将散列表分割成16个散列桶,每个线程只锁一个桶。

  • 相关阅读:
    arm-linux-3.4.2移植for2440
    编译内核是出现:arch/arm/mm/tlb-v4wbi.S:64:error: too many positional arguments
    poj3050 Hopscotch
    poj3187 Backward Digit Sums
    poj2718 Smallest Difference
    hihocoder offer收割编程练习赛10 C 区间价值
    poj1862 Stripies
    poj3262 Protecting the Flowers
    poj2229 Sumsets
    poj2385 Apple Catching
  • 原文地址:https://www.cnblogs.com/deolin/p/7073040.html
Copyright © 2011-2022 走看看