首页 > 代码库 > 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 备忘点