Java Collections API中的幾種哈希表html
哈希函數是將插入的數據看成自變量,經過一種算法來儘量地使每一個數都有一個獨有的值,這個值會成爲哈希表的下標。git
弱關鍵字:弱引用是用來描述非必需對象的,被弱引用關聯的對象只能生存到下一次垃圾收集發生以前,當垃圾收集器工做時,不管當前內存是否足夠,都會回收掉只被弱引用關聯的對象。算法
.數組
該鏈式方法是將哈希表總體劃分爲元素儲存區和溢出區。例如像這樣子的:數據結構
哈希表中的每一個位置不只保存元素,也保存鏈表中下一個衝突元素爲於溢出區的下標。函數
侷限性:當一個數組做爲哈希表的時候,數組會有滿的可能,須要用到動態擴容的方法。這種方法最壞的狀況是:元素不能很好地分散在列表中,會致使哈希表的插入和查找的複雜度都變爲O(n)性能
這個方法一個比上面使用溢出區的鏈式方法好的地方在於動態擴容的難度變小,由於衝突的元素不會放在主哈希表中,擴容的標準看主哈希表便可。學習
經過哈希函數得到的哈希表下標,若是該位置已經佔用,則在哈希函數中對自變量進行遞增,直到找到位置。ui
侷限性:這樣作的同時也會將其餘元素的位置給佔用。並且若是哈希函數比較簡單,會致使元素在哈希表中匯聚,從而影響到插入以及查找的性能。設計
經過對哈希函數進行調整使衝突元素在當前位置的周圍找到空位插入。
公式:newhashcode(x) = hashcode(x) + (-1)^(i-1)((i+1)/2)^2(i的取值是1到 表長-1)
假設當前被佔用的位置是p,使用該方法就會對p,p+1,p-1,p+4,p-4,p+9,p-9...這些位置進行查找,將元素插入在空位置中,從而實現衝突的解決。
相比線性探測方法,這種方法引起彙集的趨勢沒那麼強。
.
取模運算:index = HashCode(Key) % Length
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 15篇 | 400小時 | |
第一週 | 200/200 | 2/2 | 20/20 | |
第二週 | 20/220 | 1/3 | 20/40 | |
第三週 | 645/865 | 1/4 | 14/54 | |
第五週 | 654/1519 | 1/5 | 18/72 | |
第六週 | 436/1955 | 1/6 | 16/88 | |
第七週 | 839/2794 | 2/8 | 20/108 | |
第八週 | 2143/4937 | 2/10 | 25/133 | |
第九周 | 1368/6305 | 2/12 | 18/151 | |
第十週 | 2452/8757 | 1/13 | 16/167 | |
第十一週 | 795/9552 | 1/14 | 18/185 | |
計劃學習時間:16小時
實際學習時間:18小時