注意:
(1)如果在建立時給定了初始化大小,那麼hashtable會直接使用你給定的大小,而hashmap會將其擴充為2的冪次方大小。
(2)hashmap的初始容量為16,hashtable初始容量為11,兩者的填充因子預設都是0.75
(3)hashmap擴容時是當前容量翻倍即:capacity2,hashtable擴容時是容量翻倍+1即:capacity2+1
雜湊(hash)衝突:當關鍵字集合很大時,關鍵字值不同的元素可能會映像到雜湊表的同一位址上,即k1!=k2,但f(k1)=f(k2),這種現象稱為hash衝突。雜湊表要解決的乙個問題就是雜湊值的衝突問題,通常有4種解決衝突的方法:
(1)鍊錶法(鏈位址法):將相同hash值的物件組織成乙個鍊錶放在hash值對應的槽位,其中乙個物件會記錄下乙個物件的位址;
(2)開放位址法:通過乙個探測演算法,當某個槽位已經被佔據的情況下繼續查詢下乙個可以使用的槽位;
(3)再hash法:同時構造多個不同的雜湊函式,當乙個出現衝突時用另乙個,直至沒有衝突發生。這種方法不易產生聚集,但增加了計算時間。
(4)建立公共溢位區:將雜湊表分為基本表和溢位錶兩部分,凡是和基本表發生衝突的元素,一律填入溢位表。
**hashmap和hashtable hash衝突解決的方法採用的都是鍊錶法,鍊錶是單向鍊錶。**也就是說陣列+鍊錶的底層構造本質上解決的hash衝突。
待完成。。。
待完成。。。。
int hash = key.hashcode();
int index = (hash & 0x7fffffff) % table.length;
Java中HashTable和HashMap的區別
1 hashtable的方法是同步的,hashmap不同步,所以在多執行緒情況下,使用的是hashtable 2 hashtable不允許null值 key和value都不可以 hashmap允許null值 key和value都可以 3 hashtable有乙個contains 方法,功能和cont...
資料結構之HashTable與HashMap
首先介紹一下hashtable 與hashmap hashtable類實現乙個雜湊表,該雜湊表將鍵對映到相應的值。任何非 null 物件都可以用作鍵或值。hashmap是基於雜湊表的map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。hashmap不保證對映的...
Hashtable和Dictionary效能比較
在.net1.1裡經常會使用到hashtable,到裡.net 2.0以後我發現有了乙個很好用的idictionary實現類dictionary。但還是會擔心dictionary的檢索效率是否跟hashtable相當,據我了解arraylist的檢索效率是非常差的,binarysearch也不如ha...