存储器高效稀疏阵列中的Java(Memory-efficient sparse array in J

2019-06-18 08:51发布

(大约有时效性的稀疏矩阵,但我正在寻找存储效率的一些问题。)

我需要的等效List<T>Map<Integer,T>其中

  1. 只是通过设置比以前也遇到过大的关键需求能够增长。 (可以假设键是负数。)
  2. 大约是内存效率作为ArrayList<T>中,大部分的指数是并非如此null ,即,当实际数据不是很稀疏。
  3. 当指数是稀疏,占用的空间比例,以非数量null指数。
  4. 使用比存储器更少HashMap<Integer,T>因为这autoboxes键和可能不充分利用标量密钥类型)。
  5. 可以获取或设置在摊销日志(N)的时间的元素,其中N是条目的数量:不必是线性时,二分搜索将是可接受的。
  6. 实现在一个非病毒开源纯Java库(优选Maven中中部)。

有谁知道这样一个工具类的?

我本来期望Commons Collections中有一个,但它似乎没有。

我碰到org.apache.commons.math.util.OpenIntToFieldHashMap看起来差不多吧,除了值类型是FieldElement这似乎无偿的; 我只是想T extends Object 。 它看起来会很容易地修改它的源代码,以便更为通用,但我宁愿使用二进制的依赖(如果可用)。

Answer 1:

我会尝试用宝库收藏,有TIntObjectMap它可以为您的意图工作。



Answer 2:

我想看看Android的SparseArray实施灵感。 您可以点击这里下载AOSP源代码查看源http://source.android.com/source/downloading.html



Answer 3:

我会建议你从柯尔特库使用OpenIntObjectHashMap。 链接



Answer 4:

我救了我的测试情况下, jglick / inthashmap 。 结果:

HashMap size: 1017504
TIntObjectMap size: 853216
IntHashMap size: 846984
OpenIntObjectHashMap size: 760472


Answer 5:

后期对于这个问题,但IntMap在libgdx它采用杜鹃哈希 。 如果有什么这将是有趣与别人比较。



文章来源: Memory-efficient sparse array in Java