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函數是一種解決辦法。
新聞熱點
疑難解答