1.從hashmap說起
我們知道map以鍵值對的形式來儲存資料。有一點值得說明的是,如果要使用我們自己的類作為鍵,我們必須同時重寫hashcode() 和 equals()兩個方法。hashmap使用equals方法來判斷當前的鍵是否與表中的鍵相同。equals()方法需要滿足以下5個條件
2.雜湊
雜湊的價值在於速度。假如鍵沒有按照一定的順序進行儲存,那麼查詢的時候就只能按照順序進行線性查詢,然而,線性查詢是最慢的查詢方式。所以,將鍵值按照一定的順序排序,並且使用二分查詢能購有效的提公升速度。雜湊在此之上,更近一步,他將鍵儲存在陣列中(陣列的查詢速度最快),用陣列來表示鍵的資訊,但是由於map的容量是可變的,而陣列的容量是不變的。要解決這個問題,陣列中存的並不是鍵本身,而是鍵物件生成的乙個數字,將其作為陣列的下標,這個數字就是雜湊碼。
而這種辦法所產生的問題就是下標重複。而我們的解決辦法就是配合equals來確定鍵值。
查詢的過程首先就是計算雜湊碼,然後用雜湊碼來查詢函式(下標),通常,我們的陣列中儲存的是值的list,因此,我們計算出雜湊碼之後,通過下表取到的對應部分的list,然後通過equals就可以快速找到鍵值。
3.hashcode
hashcode函式是用來生成雜湊碼的,我們看看integer的計算方式(ps:我們自己的物件我們要選擇自己的方式)
public
static
inthashcode(int
value)
這裡不在多說,我們自己的類有自己的雜湊碼實現就好。
4. 以hashmap的get方法來說明
public v get(object key)
int hash = collections.secondaryhash(key);
hashmapentry tab = table;
for (hashmapentrye = tab[hash & (tab.length - 1)];
e != null; e = e.next)
}return
null;
}
k ekey = e.key
; if (ekey == key || (e.hash == hash && key.equals(ekey)))
5.總結
不知道各位朋友看了這篇之後是否理解了雜湊和雜湊碼。還是原來就懂,被我這麼一頓bb,不懂了!!!
java 基礎 怎麼理解雜湊表
我們平時程序接觸雜湊表或者複寫hashcode,我們有知道這樣使用就能夠提公升 效率.比如在二分查詢時候,可以將時間複雜度從 o n o lg n 然後,學習應該知道 所有 更應該知道 所以然 本文章主要對雜湊表這一資料結構進行理解 什麼是雜湊表hash函式 雜湊表 通過關鍵字更高效率的獲取資料的一...
雜湊與多級雜湊
最近接觸到的專案有用到多級雜湊做快取,趁現在有時間,學習並總結一下雜湊方面的知識。一 雜湊。使用 1.雜湊值計算方法。2 比較與匹配方法。解決衝突的好方法 1.開鏈法,用鍊錶儲存衝突值。2.開放位址法,用桶的概念,每個桶存k個元素。衝突的放在這相鄰的元素裡。優點是快 緩衝中相鄰位址命中率高 缺點是有...
區域性敏感雜湊之分層法與雜湊碼法
學到現在越來越感覺計算機網路 作業系統的重要性,組成原理到沒感覺出來,求推薦資料,我想要的是描述性解釋,教材不是我想要的,謝謝!感覺自己的知識很老舊,在沒有出國也沒去高水平大學的條件下,只能通過網路學習了,感謝。在檢索技術中,索引一直需要研究的核心技術。當下,索引技術主要分為三類 基於樹的索引技術 ...