首页 > 代码库 > Java Collecttion Framework 备忘点

Java Collecttion 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个散列桶,每个线程只锁一个桶。

Java Collecttion Framework 备忘点