雜湊表是以陣列加鍊表加紅黑樹來儲存資料的。
當相同雜湊值的元素大於等於8個時(即雜湊衝突的元素超過8個),就會使用紅黑樹來儲存,因為紅黑樹查詢效率很高。
雜湊表的儲存是首先通過雜湊函式來計算雜湊值(hashcode())來確定你要放到雜湊表裡面的哪乙個位置。
這裡有乙個問題是:
兩個元素會出現相同的雜湊值,至於為什麼可以參考其他部落格。
當出現雜湊值相同時,這兩個元素就會放進鍊錶裡面,比如a和b的雜湊值都是95533,a和b就會放進鍊錶裡面。
但是如果資料很多,雜湊表固定,那麼就會造成資料太密集,同時鍊錶就會很長,造成查詢和插入次數多,造成效能下降。
如果增加雜湊表的長度,而要儲存的資料並不多,就會造成空間的浪費。
為了合理解決這個問題,就有了負載因子的概念:
負載因子=填入表中元素/雜湊表的長度
通俗理解負載因子就是告訴雜湊表什麼時候該擴容了。
比如,我們知道初始的hashmap初始容量為16,如果負載因子為1,即16*1=16,等容量完全占用以後才會擴容,那麼就會增加時間查詢成本。
負載因子過高就是第一種情況,造成效能下降;如果負載因子低就會造成空間的浪費,一般來說負載因子為0.75時能效比最大。
這裡最主要的是兩個方法:hashcode()和equals()。
當往裡面儲存元素時,首先會呼叫hashcode()方法,計算雜湊值,然後判斷雜湊表中有沒有這個值,如果沒有那麼直接儲存,如果有,即發生了雜湊衝突,然後再呼叫equals方法判斷所儲存的元素和相同雜湊值的元素是否一樣,如果不同,則將新的也進行儲存,如果相同,則不儲存。
CURL不可以讀寫檔案
最近在學es elastic search 參考裡面翻譯的官方權威指南 後面發現官網已經推出了中文版文件了 裡面有的例子把訪問es的命令做了簡化如下 curl xget localhost 9200 count?pretty d 簡化為 get count 一開始我以為是es報的錯,進es的日誌,發...
觸發器不可以亂用
突然發現有乙個語句 update dnt users set adminid 0 where groupid 7 執行得特別慢,更新的資料是四萬多條記錄,表裡也是有四萬多條記錄。在檢視後發現庫里有乙個觸發器 if exists select name from sysobjects where na...
nyoj 1071 不可以! 水
時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 判斷 兩個數x y的正負性。要求 不可以使用比較運算子,即 輸入 有多組資料,每組資料佔一行,每一行兩個數x,y。x y保證在int範圍內。輸出 每組資料輸出佔一行。如果兩個數是一正一負,輸出 signs are opposit...