[英]primitive multimap in java with good (insert, iteration) performance characteristics
我正在使用 Java 中的 ints/longs 進行一些繁重的處理(構建逆索引)。
我已經確定標准 java.collections 地圖的(取消)裝箱占用了總處理時間的很大一部分。 (與使用數組的類似實現相比,由於內存限制我無法使用)。
我正在尋找可以支持以下結構的快速 3rd 方實現(或任何與此相關的實現):
具有特征的地圖:
- 映射中的鍵是稀疏的(范圍 [0,2^64] 中的 +/- 10.000.000 個鍵 - 值總是附加到列表的末尾 - 快速插入(如果可能的話,分攤 O(1)) - 快速迭代按鍵順序。
我看過 trove、fastutil 等,但找不到使用原語的多圖實現(僅法線貼圖)
任何幫助表示贊賞。
謝謝,吉爾特-簡
您是否考慮過使用原始 long -> Object-map 和原始 int-set 作為值自己實現多部分?
根據基數可以使用特定類型的對象 Primitive Int/Long To where value:
if (size == 1) => Long(如果有大量重復,可以去重);
if (size <= 13) => LogSet(數組中有 16 個元素);
如果(大小> 13)=> SparceLongBitSet。 使用例如 16 長作為每個塊的有效載荷(甚至可以重用數組)
對於 int 可以將 26 視為決定點。 如果性能非常重要,請僅使用特定的分片/塊大小進行基准測試,例如 SparseLongBitSet。 對於內存局部性,請考慮重用相同的內存塊(例如 2M 的數組)。
最后一滴:Insted of Object 考慮使用索引到有效載荷(例如堆外指針)並使用靜態方法(Flightweith 之類)對有效載荷進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.