哈希計(jì)算方法不同
hashmap:HashMap計(jì)算hash對(duì)key的hashcode進(jìn)行了二次hash,以獲得更好的散列值,然后對(duì)table數(shù)組長(zhǎng)度取模。
hashtable:Hashtable計(jì)算hash是直接使用key的hashcode對(duì)table數(shù)組的長(zhǎng)度直接進(jìn)行取模。
鍵值是否可以為空值
hashmap:HashMap可以使用null作為key,不過(guò)建議還是盡量避免這樣使用。HashMap以null作為key時(shí),總是存儲(chǔ)在table數(shù)組的名列前茅個(gè)節(jié)點(diǎn)上。
hashtable:Hashtable則不允許null作為key
初始化容量不同
hashmap:HashMap 的初始容量為:16。
hashtable:Hashtable 初始容量為:11。
兩者的負(fù)載因子默認(rèn)都是:0.75
同步性不同
hashmap:HashMap是一個(gè)不同步的Map,這意味著HashMap是線(xiàn)程不安全的,如果沒(méi)有適當(dāng)?shù)耐酱a,則無(wú)法在多個(gè)線(xiàn)程之間共享。
hashtable:Hashtable是一個(gè)同步的Map,Hashtable是線(xiàn)程安全的,可以在多個(gè)線(xiàn)程之間共享。如果您需要使用同步的 Map,Hashtable 比在同步包裝器中使用 HashMap 更快。
性能不同
由于HashMap不是同步的Map,因此在性能方面它比Hashtable更快,更好,實(shí)際上,它比Hashtable使用更少的內(nèi)存。雖然它們實(shí)際上是相同的,但Hashtable比HashMap慢一點(diǎn),但比同步的HashMap快一點(diǎn)。從本質(zhì)上講,將 Hashtable 與多線(xiàn)程訪(fǎng)問(wèn)結(jié)合使用是不安全的,因?yàn)橹挥蟹椒ㄊ峭降?。Hashtable是HashMap的同步對(duì)應(yīng)物。與同步對(duì)象相比,非同步對(duì)象的性能更好,就像 Hashtable 在單線(xiàn)程環(huán)境中的性能更好一樣。