[英]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 Eden的TCustomHashMap
答案似乎是TCustomHashMap
的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.