簡體   English   中英

外部文件Java的哈希函數

[英]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 (注意負數),或者
  • 使用2的下一個冪,即2048: key.hashCode() & (2048 - 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM