(有一些关于时间效率稀疏数组的问题,但我正在寻找内存效率。)
我需要一个等价于
我本来以为Commons Collections会有一个,但似乎没有。
我发现
我需要一个等价于
List<T>
或Map<Integer,T>
的东西,它:
- 可以通过将键设置为大于之前遇到的任何键来随需增长。(可以假设键是非负的。)
- 在大多数索引不为
null
的情况下,与ArrayList<T>
一样占用内存效率,即实际数据不是非常稀疏的情况下。 - 当索引稀疏时,消耗与非
null
索引数量成比例的空间。 - 使用比
HashMap<Integer,T>
更少的内存(因为这会自动装箱键,并且可能不利用标量键类型的优势)。 - 可以在摊销log(N)时间内获取或设置条目,其中N是条目数:不需要是线性时间,二分查找也可以接受。
- 在非病毒开源纯Java库中实现(最好在Maven Central中)。
我本来以为Commons Collections会有一个,但似乎没有。
我发现
org.apache.commons.math.util.OpenIntToFieldHashMap
看起来几乎正确,除了值类型是FieldElement
,这似乎是多余的;我只想要T extends Object
。它看起来很容易编辑其源代码使其更通用,尽管如果有二进制依赖项可用,我宁愿使用它。
OpenIntToFieldHashMap
适应为通用值类型,经过约10分钟的工作,似乎已经成功了,但它的性能仅比TIntObjectMap
略好。 - Jesse Glick