java中的原始multimap具有良好(插入,迭代)性能特征

时间:2009-11-12 13:19:08

标签: java performance collections multimap

我正在使用Java中的ints / long进行一些繁重的处理(构建反向索引)。

我已经确定标准java.collections地图的(联合)装箱占用总处理时间的很大一部分。 (与使用数组的类似实现相比,由于内存限制我无法使用它)。

我正在寻找一个可以支持以下结构的快速第三方实施(或任何实施):

地图 具有特点:

地图中的

-keys稀疏(范围为[0,2 ^ 64]的+/- 10.000.000个键) - 值始终附加到列表的末尾 - 快速插入(如果可能,摊销O(1)) 按键顺序的快速迭代。

我看过trove,fastutil等,但找不到使用基元的多图实现(只有法线贴图)

感谢任何帮助。

谢谢, 吉尔特-扬

3 个答案:

答案 0 :(得分:1)

您是否考虑过使用原始long来实现多部分 - >对象映射和原始int-set为值?

答案 1 :(得分:0)

Google馆藏库怎么样? http://code.google.com/p/google-collections/

答案 2 :(得分:0)

根据基数可以使用特定类型的对象 原始Int / Long To的值:

  • if(size == 1)=>长(如果有大量重复项,可以删除);

  • if(大小<= 13)=> LogSet(数组中有16个元素);

  • 如果(大小> 13)=> SparceLongBitSet。使用例如每块16个有效负载(甚至可以重用数组)

对于int可以将26作为目标点。如果性能非常重要,请进行基准测试SparseLongBitSet仅具有特定的分片/块大小。对于内存局部性,请考虑重复使用相同的内存块(例如2M的阵列)。

最后一滴: 插入对象时,请考虑对有效负载使用索引(例如,offheap指针),并使用静态方法(类似于Flightweith)对有效负载进行操作。