我正在使用Java中的ints / long进行一些繁重的处理(构建反向索引)。
我已经确定标准java.collections地图的(联合)装箱占用总处理时间的很大一部分。 (与使用数组的类似实现相比,由于内存限制我无法使用它)。
我正在寻找一个可以支持以下结构的快速第三方实施(或任何实施):
地图 具有特点:
地图中的-keys稀疏(范围为[0,2 ^ 64]的+/- 10.000.000个键) - 值始终附加到列表的末尾 - 快速插入(如果可能,摊销O(1)) 按键顺序的快速迭代。
我看过trove,fastutil等,但找不到使用基元的多图实现(只有法线贴图)
感谢任何帮助。
谢谢, 吉尔特-扬
答案 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)对有效负载进行操作。