(有一些关于节省时间的稀疏数组的问题,但我正在寻找内存效率。)
我需要相当于 a List<T>
or Map<Integer,T>
which
- 只需将密钥设置为比以前遇到的任何密钥都大,就可以按需增长。(可以假设键是非负的。)
ArrayList<T>
在大多数索引不是 的情况下null
(即实际数据不是很稀疏时)的内存效率差不多。null
当索引稀疏时,消耗的空间与非索引的数量成正比。- 使用更少的内存
HashMap<Integer,T>
(因为这会自动装箱键并且可能不利用标量键类型)。 - 可以在摊销的 log(N) 时间内获取或设置元素,其中 N 是条目数:不必是线性时间,二进制搜索是可以接受的。
- 在非病毒开源纯 Java 库中实现(最好在 Maven Central 中)。
有谁知道这样的实用程序类?
我本来希望 Commons Collections 有一个,但似乎没有。
我发现org.apache.commons.math.util.OpenIntToFieldHashMap
它看起来几乎正确,除了值类型是 aFieldElement
似乎是无偿的;我只是想要T extends Object
。看起来很容易将其源代码编辑为更通用,但如果有可用的二进制依赖项,我宁愿使用它。