[英]Hashing function for external file Java
我正在嘗試創建一個哈希函數,以便將節點放置到RandomAccessFile上。
我的節點大小為256字節,我讀到某個地方長度應該是總節點大小的兩倍。 我將在文件上放置1,000個節點,因此我選擇了2,000個作為總大小。
我嘗試使用此公式
int position = key.hashCode()&(2000-1)
但是我總是得到太小而無法容納節點的位置。 例如當我打印位置時
位置521和524
但是我的節點是256個字節,所以如果我要在位置521寫入一個節點,在524寫入另一個節點,它們會重疊...對嗎?
我已經嘗試了來自stackoverflow和Internet上其他資源的一系列哈希函數,但是找不到合適的哈希函數。
如果您有1000個節點,則521和524表示256的倍數的位置。通過將該數字乘以256或將其左移8來計算字節的實際位置。
注意:僅當x
為2的冪時,使用& (x-1)
的截斷技巧才有效。由於2000並非2的冪,因此不能使用& (2000 - 1)
截斷哈希碼。
您在這里有兩個選擇:
%
代替,即key.hashCode() % 2000
(注意負數),或者 key.hashCode() & (2048 - 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.