我想實(shí)現(xiàn)一個(gè)HashMap數(shù)據(jù)結(jié)構(gòu),但是我不太清楚該如何處理底層數(shù)組結(jié)構(gòu)。如果我沒記錯(cuò)的話,在HashMap中,每個(gè)鍵都經(jīng)過哈希處理并轉(zhuǎn)換為整數(shù),該整數(shù)用于引用數(shù)組索引。由于直接引用,搜索時(shí)間為O(1)。假設(shè)K是關(guān)鍵,V是值。我們可以創(chuàng)建一個(gè)大小為n的V型數(shù)組,該數(shù)組將駐留在hash(K)函數(shù)產(chǎn)生的索引中。但是,hash(K)不會(huì)產(chǎn)生連續(xù)的索引,Java的數(shù)組也不稀疏,要解決此問題,我們可以創(chuàng)建一個(gè)非常大的數(shù)組來容納元素,但效率不高,它將容納很多NULL元素。一種解決方案是按連續(xù)順序存儲(chǔ)元素,要查找元素,我們必須搜索整個(gè)數(shù)組并檢查元素的鍵,但這將是線性時(shí)間。我想實(shí)現(xiàn)直接訪問。
2 回答

猛跑小豬
TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以通過將哈希對(duì)數(shù)組大小取模來使用較小的數(shù)組進(jìn)行基礎(chǔ)存儲(chǔ),如下所示:
hash?=?hashfunc(key) index?=?hash?%?array_size
這是一個(gè)很好的解決方案,因?yàn)槟梢允够A(chǔ)數(shù)組保持相對(duì)密集,而不必修改哈希函數(shù),并且它不會(huì)影響時(shí)間復(fù)雜度。
添加回答
舉報(bào)
0/150
提交
取消