(有一些关于时间效率稀疏数组的问题,但我正在寻找内存效率。)
我需要相当于List<T>
或Map<Integer,T>
ArrayList<T>
的情况下,即当实际数据不是很稀疏时,与null
一样具有内存效率。null
索引的数量成比例。HashMap<Integer,T>
(因为这会自动锁定密钥,可能不会利用标量密钥类型)。有谁知道这样的实用类?
我原本希望Commons Collections有一个,但似乎没有。
我遇到的org.apache.commons.math.util.OpenIntToFieldHashMap
看起来几乎是正确的,除了价值类型是FieldElement
似乎是无偿的;我只想要T extends Object
。它看起来很容易编辑它的源代码更通用,但我宁愿使用二进制依赖,如果有一个。
答案 0 :(得分:6)
我会尝试使用trove个集合,TIntObjectMap可以用于您的意图。
答案 1 :(得分:4)
我会看一下Android的SparseArray实现的灵感。您可以通过在http://source.android.com/source/downloading.html
下载AOSP的源代码来查看源代码答案 2 :(得分:1)
我已将我的测试用例保存为jglick/inthashmap。结果:
HashMap size: 1017504
TIntObjectMap size: 853216
IntHashMap size: 846984
OpenIntObjectHashMap size: 760472
答案 3 :(得分:1)
我建议你使用Colt库中的OpenIntObjectHashMap。 Link
答案 4 :(得分:0)
这个问题很晚,但是libgdx中有IntMap,它使用cuckoo hashing。如果有什么话,可以与其他人进行比较。