java的集合对比
java 集合另一个大接口就是 Map ,与 Collection 最大的不同就是, Collection 存储的是一个对象,而 Map 存储的是一对对象,即 key—Value 的形式存储, key 是不能重复的。能把 Map 实例化的类有 4 个: HashMap , Hashtable , WeakHashMap , TreeMap 。
Map 的遍历,是先通过 entrySet ()获取他 set 集合,同理, keySet ()获取他的 key 的 set 集合, values ()获取他的 value 的 set 集合,再通过 set 集合取 Iterator 进行遍历。
HashMap
他有 Map 的所有特性, key 和 value 都是可以为 null 的。不是线程安全的,如果 key 重复了,那么后一个 key 的 value 会覆盖前一个 key 的 value ,反正保存的集合中, key 是不会有重复的。他有个初始容量( 16 ) 和加载因子(默认为 0.75 ),他有一个阈值(初始容量 * 加载因子),如果 size 超过这个阈值,那么容量就 x 2 。
Hashtable
感觉他和 HashMap 差不多, Hashtable 的初始容量是 11 ,每次 size 增加 x2 +1 个。 key 和 value 都不能为 null , 他的线程安全的。他的遍历顺序和 HashMap 是反的, HashMap 是从前向后,而 Hashtable 是从后向前。他多了一种遍历方式, Enumeration 。
TreeMap
感觉他就是一个 key 有顺序的 key-value 集合,他的 key 不能是 null , value 可以。他也不是线程安全的。
WeakHashMap
他和 HashMap 差不多,但是他的键是弱键,会被 GC 回收。
最后,若想把线程不安全的集合变成安全的,用 Collections.synchronizedMap , Collections.synchronizedSet , Collections.synchronizedList 函数是一种解决办法。