hashmap為什么用紅黑樹(shù) hashtable實(shí)現(xiàn)了哪個(gè)接口?
hashtable實(shí)現(xiàn)了哪個(gè)接口?哈希表和哈希映射之間的區(qū)別:1。Hashtable是dictionary的子類,HashMap是map接口的實(shí)現(xiàn)類;2。hashtable中的方法是同步的,而Hash
hashtable實(shí)現(xiàn)了哪個(gè)接口?
哈希表和哈希映射之間的區(qū)別:
1。Hashtable是dictionary的子類,HashMap是map接口的實(shí)現(xiàn)類;
2。hashtable中的方法是同步的,而HashMap中的方法默認(rèn)是異步的。也就是說(shuō),在多線程應(yīng)用程序中,hashtable可以安全地使用,不需要特殊的操作;對(duì)于HashMap,需要額外的操作,但是HashMap的同步問(wèn)題可以通過(guò)一個(gè)靜態(tài)的集合方法來(lái)解決:map集合.synchronizedMap(Map m)此方法返回一個(gè)同步映射,它封裝了底層HashMap的所有方法,使得底層HashMap即使在多線程環(huán)境中也是安全的。在HashMap中,null可以用作鍵,并且只有一個(gè)這樣的鍵;一個(gè)或多個(gè)鍵可以具有對(duì)應(yīng)的null值。當(dāng)get()方法返回一個(gè)null值時(shí),表示HashMap中沒(méi)有鍵。這個(gè)鍵還可以指示對(duì)應(yīng)于這個(gè)鍵的值為null。因此,在HashMap中,我們不能使用get()方法來(lái)確定HashMap中是否有鍵,而應(yīng)該使用containskey()方法來(lái)確定
1。鍵和值都不能為null,這是線程安全的。實(shí)現(xiàn)線程安全的方法是在修改數(shù)據(jù)時(shí)鎖定整個(gè)哈希表,效率很低
2。初始大小為11,展開(kāi):newsize=oldsize*21
1??梢源鎯?chǔ)空鍵和空值,但線程不安全
2。初始大小是16,擴(kuò)展:newsize=oldsize*2,大小必須是2的n次方
哈希表是線程安全的,HashMap是非線程安全的。Hashtable是基于舊的dictionary類,HashMap是在引入map接口后對(duì)java1.2的重新實(shí)現(xiàn)。哈希表方法,鎖同步,可用于多線程環(huán)境。HashMap需要程序員提供同步,以便它在多線程中運(yùn)行。常用的方法是使用collections類的static synchronizedmap()方法來(lái)創(chuàng)建線程安全映射對(duì)象或使用并發(fā)HashMap。