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函数是一种解决办法。