java集合在选用的时候应该选那个合适?一张表告诉你该怎么选java集合
java集合类 | 是否线程安全 | 是否键值对 | 排序 | 性能 | 元素是否可重复 | 扩容策略 | |
List接口 | arraylist | 否 | 否 | 维持存的时候的顺序 | 查询性能高,增删元素性能低 | 是 | 1.5倍扩容,元素大于当前容量的100%时进行扩容 |
linkedlist | 否 | 否 | 有顺序 | 查询性能低,增删元素性能高 | 是 | ||
vector | 是 | 否 | 有顺序 | 低 | 是 | ||
Stack | 是 | 否 | 有顺序,先进后出 | 低 | 是 | ||
Map接口 | hashmap | 否 | 是 | 不排序 | 快速插入和查找 | key不可重复,value可重复 | 2倍扩容,元素大于当前容量的75%时进行扩容 |
hashtable | 是 | 是 | 不排序 | 低 | key不可重复,value可重复 | ||
treeMap | 否 | 是 | 根据key自动排序 | 快速插入和查找 | key不可重复,value可重复 | ||
Set接口 | hashset | 否 | 否 | 不排序 | 快速插入和查找 | 否 | |
treeset | 否 | 否 | 默认升序排序(按照compare to接口返回值) | 快速插入和查找 | 否 |
使用指南:
1 在集合场景明确的情况下,指定初始化容量,因为不指定容量,初始化容量为10,每次扩容都会对底层数组做一次拷贝,消耗性能;
2 所有集合底层存储都是数组,数组可以存放基本类型,集合只能存对象
3 Java.lang.reflect.Array工具提供了对数组的操作;Java.util.collection工具提供了集合的操作
4 HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果