2017-02-07 23 views
1

我正在讀取一個包含sha加密哈希列表的文件。我可以在內存中讀取它們作爲List<String>Java中用於引用哈希值的最佳內存模型是什麼?

這是一個非常大的列表和一個字符串可能是一個非常浪費的內存模型...所以我想弄清楚是否有更好的方式來存儲這個列表在內存中。

例如,如果它是UUID字符串的列表,我會將它們變成List<UUID>

哈希值是否等價?


對不起 - 這裏有一些背景。我正在做一些spark-map/reduce比較,我想確保內存中的散列值儘可能高效地存儲。


從評論它聽起來像我應該將它們存儲在字節數組。所以這將意味着將字符串轉換爲哈希對象,然後獲取字節數組...

+1

假設散列是base64編碼的字符串,您可以解碼字符串並將每個散列存儲爲字節數組。但是,您需要文件中真正大量的哈希來解決內存問題。你有多少?文件大小是多少你真的首先需要內存中的所有哈希值嗎? –

+0

如果它們都具有相同的大小(以字節爲單位),則可能會執行更好的字節讀取塊。 – renanlf

+0

@JBNizet將哈希存儲爲用於引用的字節數組是什麼意思? – Andremoniy

回答

0

只需使用String.getBytes()方法即可將String轉換爲字節數組。請注意,這將返回組成散列值的字符串表示形式的字節,而不是散列的數值。

相反,假設您的散列值是十六進制(基數16)編碼的字符串,那麼您可以使用谷歌的guava庫。它有一個Hashing類與哈希公用事業。它具有存儲散列值的類HashCode,例如,在字節數組中(BytesHashCode)。這個類有一個fromString(string)方法來創建一個HashCode實例,您可以從中獲取實際值的字節數組/長整型表示。在你的例子中,這個類或多或少等於UUID

+0

需要番石榴15+ – hba

相關問題