有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的内存效率稀疏数组

(关于时间效率高的稀疏数组存在一些问题,但我希望提高内存效率。)

我需要一个List<T>Map<Integer,T>的等价物

  1. 只需设置一个比以前遇到的任何键都大的键,就可以按需增长。(可以假定关键帧为非负。)
  2. 在大多数索引不是null的情况下,即当实际数据不是非常稀疏时,大约与ArrayList<T>的内存效率相同
  3. 当索引稀疏时,消耗的空间与非null索引的数量成比例
  4. 使用的内存少于HashMap<Integer,T>(因为这会自动装箱键,并且可能不会利用标量键类型)
  5. 可以在摊销日志(N)时间中获取或设置元素,其中N是条目数:不必是线性时间,可以接受二进制搜索
  6. 在非病毒开源纯Java库中实现(最好在Maven Central中实现)

有人知道这样一个实用程序类吗

我本以为Commons Collections会有一个,但它似乎没有

我遇到了org.apache.commons.math.util.OpenIntToFieldHashMap,它看起来几乎正确,除了值类型是FieldElement,它似乎是免费的;我只想要T extends Object。看起来编辑它的源代码变得更通用会很容易,尽管如果有二进制依赖关系,我更愿意使用它


共 (5) 个答案

  1. # 2 楼答案

    我建议您使用Colt库中的OpenInObjectHashMapLink

  2. # 3 楼答案

    我已将测试用例保存为jglick/inthashmap。结果是:

    HashMap size: 1017504
    TIntObjectMap size: 853216
    IntHashMap size: 846984
    OpenIntObjectHashMap size: 760472
    
  3. # 4 楼答案

    关于这个问题,现在已经晚了,但是libgdx中有IntMap,它使用cuckoo hashing。如果有什么区别的话,和其他人比较会很有趣