String | SringBuffer | StringBuilder |
不可变类 | 可变 | 可变 |
线程安全 | 线程不安全 | |
性能高 |
Collection | Set | 无序、不可重复 |
List | 有序、可重复 | |
Queue | 队列 | |
Map | Map | key-value映射 |
Set: | |||||||||||||||
HashSet | 可插入null | ||||||||||||||
TreeSet | 不可插入null | 红黑树 | 自然排序和定制排序 | 自动排序时,插入的对象对应的类必须实现 Comparable 接口 ,且为同一个类 | 定制排序时构造 compare(T o1, To2) | ||||||||||
不要修改set中的值,将导致复杂问题,如不会重新排序,修改后的值存在原来的存储位置无法找到等 | |||||||||||||||
EnumSet | 有序的 | 向量存储,占内存少,效率在Set里最高 | 不允许插入null | 无暴露构造方法,通过类方法创建实例 | |||||||||||
只有需要排序时用 TreeSet,其它的都用HashSet,因为性能更好,LinkedHashSet是HashSet子类,遍历的时候会更快(由于维护了有序链表),其它性能略低一些,上面Set都是线程不安全的 | |||||||||||||||
值不可重复,插入重复值将覆盖 | |||||||||||||||
List: | |||||||||||||||
ArrayList 线程不安全 | 基于数组实现 | 默认长度 10 | 可插入null | ||||||||||||
Vector 线程安全(老旧) | Stack继承 Vector 老旧 | ||||||||||||||
LinkedList | |||||||||||||||
大部分情况优先使用 ArrayList,然后是 LinkedList, LinkedList用Iterator 遍历,ArrayList 用随机访问 get 方法遍历 | |||||||||||||||
Collections 包装成线程安全 | |||||||||||||||
值可重复,可插入重复值 | |||||||||||||||
Queue: | |||||||||||||||
PriorityQueue | 不可插入null | 自然排序和定制排序 | 自动排序时,插入的对象对应的类必须实现 Comparable 接口 ,且为同一个类 | 定制排序时构造 compare(T o1, To2) | |||||||||||
ArrayDeque | 可插入null | 基于数组实现 | 默认长度 16 | 超过默认或指定长度会重新分配新数组 | 双端队列和栈 | ||||||||||
LinkedList | 可插入null | 基于链表 | 插入、删除快,查询需要迭代,相比基于数组的慢 | List、双端队列和栈 | |||||||||||
Map: | |||||||||||||||
先实现了map,然后把map中value都设置为null 就是 set | |||||||||||||||
值可重复,可插入重复值,但key不能重复,重复的key将覆盖原值 | |||||||||||||||
get、remove的key不存在返回null | |||||||||||||||
一些规则和HashSet基本一致 | |||||||||||||||
key 的 equals()和 hashcode()都相等即为相同key | |||||||||||||||
Hashtable | 线程安全 | key value不能为null | 老旧避免使用 | ||||||||||||
HashMap | 线程不安全 | key value能为null | key不能重复,所有最多有一个key为null | 底层也是数组实现 | |||||||||||
LinkedHashMap | 同 LinkedHashSet | ||||||||||||||
Properties | kv保存到文件或从文件加载到map | 无序 | |||||||||||||
TreeMap | 不可插入null | 红黑树 | 自然排序和定制排序 | 自动排序时,插入的对象对应的类必须实现 Comparable 接口 ,且为同一个类 | 定制排序时构造 compare(T o1, To2) | ||||||||||
WeakHashMap | 对key弱引用 | 直接量永远是强引用 | |||||||||||||
IdentityHashMap | 和HashMap唯一的区别是要求key严格相等才认为是一个key(O a == O b) | ||||||||||||||
EnumMap | 创建时必须关联枚举类 | EnumMap enumMap = new EnumMap(Season.class) | |||||||||||||
性能:EnumMap > Hashtable > HashMap = IdentityHashMap = WeakHashMap > LinkedHashMap > TreeMap | |||||||||||||||
负载极限默认值是 0.75 | |||||||||||||||
Collections 工具类: | |||||||||||||||
排序 | 主要用于List | ||||||||||||||
查询、替换 | 主要用于List | ||||||||||||||
同步控制 | Map<String, Object> m = Collections.synchronizedMap(new HashMap<>()); | ||||||||||||||
List<String> l = Collections.synchronizedList(new ArrayList<>()); | |||||||||||||||
Collection<String> c = Collections.synchronizedCollection(new ArrayList<>()); | |||||||||||||||
设置不可变集合 |