簡體   English   中英

使用hashCode()進行文件寫入時如何處理hashCode()的負值

[英]How to handle negative values of hashCode() when using it for file writing

我正在制作一個程序,其中使用字符串的散列來確定文件中的寫入位置。 以下是位置的計算方法:

private long getWriteLocation(String s){ 

    long hash = s.hashCode()%FILESIZE;

    hash = hash*FILEENTRYSIZE;

    return hash;
}  

這個問題是hashCode()可以產生負值。 這導致崩潰,因為我使用函數的輸出作為文件的寫入位置:

ptr = getWriteLocation();
dictionaryFile.seek(ptr); // crashes if ptr is negative

我的問題是如何解決這個問題。 我應該采用哈希碼的絕對值嗎? 或者我會通過這樣做引起有關哈希隨機性的問題(我懷疑我將輸出空間減半)等等? 有沒有更好的辦法?

注意:使用散列時總是存在碰撞的可能性。 因此,我通過在文件中跳過固定數量的插槽來處理沖突,直到找到空閑插槽。

哈希不是隨機的 過度簡化,它只是一些數據計算在“一些”數據上(例如,見這里 )。

從這個意義上講:通過使用Math.abs()您首先會增加碰撞的可能性。

換句話說:你的整個想法聽起來像是錯誤的方法。 因為根據要存儲的字符串數量以及FILESIZE常量,您遲早(不可避免地!)會遇到兩個不同的字符串放在同一個位置。

因此: 如果您的要求是始終不同的插槽中存儲不同的字符串,那么散列不適合您。 如果要求不是對你很重要,那么肯定的是, Math.abs() “修復”你的異常。

暫無
暫無

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

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