Java中的内存效率稀疏数组
(关于时间效率高的稀疏数组存在一些问题,但我希望提高内存效率。)
我需要一个List<T>
或Map<Integer,T>
的等价物
- 只需设置一个比以前遇到的任何键都大的键,就可以按需增长。(可以假定关键帧为非负。)李>
- 在大多数索引不是
null
的情况下,即当实际数据不是非常稀疏时,大约与ArrayList<T>
的内存效率相同李> - 当索引稀疏时,消耗的空间与非
null
索引的数量成比例李> - 使用的内存少于
HashMap<Integer,T>
(因为这会自动装箱键,并且可能不会利用标量键类型)李> - 可以在摊销日志(N)时间中获取或设置元素,其中N是条目数:不必是线性时间,可以接受二进制搜索李>
- 在非病毒开源纯Java库中实现(最好在Maven Central中实现)李>
有人知道这样一个实用程序类吗
我本以为Commons Collections会有一个,但它似乎没有
我遇到了org.apache.commons.math.util.OpenIntToFieldHashMap
,它看起来几乎正确,除了值类型是FieldElement
,它似乎是免费的;我只想要T extends Object
。看起来编辑它的源代码变得更通用会很容易,尽管如果有二进制依赖关系,我更愿意使用它
# 1 楼答案
我会尝试使用trove集合,有TIntObjectMap可以满足您的意图
# 2 楼答案
我建议您使用Colt库中的OpenInObjectHashMapLink
# 3 楼答案
我已将测试用例保存为jglick/inthashmap。结果是:
# 4 楼答案
关于这个问题,现在已经晚了,但是libgdx中有IntMap,它使用cuckoo hashing。如果有什么区别的话,和其他人比较会很有趣
# 5 楼答案
我会看看Android的SparseArray实现,以获得灵感。您可以在此处下载AOSP的源代码来查看源代码http://source.android.com/source/downloading.html