關(guān)于Map<K,V>
Map:一組成對(duì)的“鍵值對(duì)”對(duì)象鸥昏,允許你使用鍵來(lái)查找值。
Map沒(méi)有繼承Collection接口姐帚,Map提供key到value的映射吏垮。一個(gè)Map中不能包含相同的key,每個(gè)key只能映射一個(gè) value罐旗。
map.keySet()來(lái)獲取所有的key膳汪,map.values()來(lái)獲取所有的值。
常用子類(lèi):
無(wú)序九秀,允許存儲(chǔ)空對(duì)象遗嗽,而且允許鍵是空(由于鍵必須是唯一的,當(dāng)然只能有一個(gè))鼓蜒。
無(wú)序痹换,所有的鍵必須非空。為了能高效的工作都弹,定義鍵的類(lèi)必須實(shí)現(xiàn)hashcode()方法和equal()方法娇豫。
【HashMap和HashTable不同】
第一、繼承不同
public class Hashtable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
第二缔杉、Hashtable 中的方法是同步的锤躁,而HashMap中的方法在缺省情況下是非同步的。在多線(xiàn)程并發(fā)的環(huán)境下或详,可以直接使用Hashtable系羞,但是要使用HashMap的話(huà)就要自己增加同步處理了。
第三霸琴、Hashtable中椒振,key和value都不允許出現(xiàn)null值。在HashMap中梧乘,null可以作為鍵澎迎,這樣的鍵只有一個(gè)庐杨;可以有一個(gè)或多個(gè)鍵所對(duì)應(yīng)的值為null。當(dāng)get()方法返回null值時(shí)夹供,即可以表示 HashMap中沒(méi)有該鍵灵份,也可以表示該鍵所對(duì)應(yīng)的值為null。因此哮洽,在HashMap中不能由get()方法來(lái)判斷HashMap中是否存在某個(gè)鍵填渠, 而應(yīng)該用containsKey()方法來(lái)判斷。
第四鸟辅、兩個(gè)遍歷方式的內(nèi)部實(shí)現(xiàn)上不同氛什。Hashtable、HashMap都使用了 Iterator匪凉。而由于歷史原因枪眉,Hashtable還使用了Enumeration的方式 。
第五再层、哈希值的使用不同贸铜,HashTable直接使用對(duì)象的hashCode。而HashMap重新計(jì)算hash值聂受。
第六萨脑、Hashtable和HashMap它們兩個(gè)內(nèi)部實(shí)現(xiàn)方式的數(shù)組的初始大小和擴(kuò)容的方式。HashTable中hash數(shù)組默認(rèn)大小是11饺饭,增加的方式是 old*2+1。HashMap中hash數(shù)組的默認(rèn)大小是16职车,而且一定是2的指數(shù)瘫俊。