簡體   English   中英

如何使用以字節數組為鍵的trove進行多哈希映射?

[英]How to use trove for multi hashmap with byte array as key?

目前,我正在使用Guave的ArrayListMultiMap處理超過100.000個項目。 映射的鍵是一個byte array ,值很long

現在,我想減少開銷。

我的想法是只使用原始的集合和HashMap的trove 因此,最后每個鍵(字節數組)都指向一個原始集合(原始長集)。

我的問題是如何在THashmap中使用字節數組作為鍵。 在Guave中,我將字節數組包裝在一個類中,但這會產生開銷。

謝謝

您應該對外部地圖使用TCustomHashMap ,因為您將要為byte[]提出一種哈希策略(實際上,只調用Arrays.hashCode(byte[])就可以了)。

在外部地圖中,使用TLongHashSet (或其他)作為值,一切都准備TLongHashSet

您可以直接使用byte array作為鍵(無需包裝等):

Map<byte[], TLongSet> map = new THashMap<>();
map.put(new byte[]{-0x80, 0x7F}, new TLongHashSet(new long[]{0xFFFFFFFF, 0x7FFFFFFF}));
System.out.println(map);

輸出示例:

{[B@4d7e1886={2147483647,-1}}

編輯:

如果您不希望使用基於身份的密鑰,則可以使用TByteArrayList代替byte[] 在我的機器上,每個實例的開銷為25個字節。 如果將100,000個項目/長項中的每個存儲在其自己的TLongSet每個TLongSet都映射到一個唯一的byte array那么這將產生2.5 MB(25字節x 100,000)的開銷。 對於我來說,這是一個更糟糕的情況,但是如果您想避免這種情況,那么Rob EdenTCustomHashMap 答案似乎是TCustomHashMap的方法。

暫無
暫無

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

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