当前位置: 首页 > 面试题库 >

Java中的内存高效稀疏数组

宣冥夜
2023-03-14
问题内容

(关于省时的稀疏数组存在一些问题,但我正在寻找内存效率。)

我需要一个相当于List<T>Map<Integer,T>哪些

  1. 只需设置一个比以前遇到的密钥大的密钥即可按需增长。(可以假定键为非负数。)
  2. ArrayList<T>与大多数索引不是null(即实际数据不是很稀疏时)的情况下的内存效率差不多。
  3. 当索引稀疏时,消耗的空间与非null索引的数量成正比。
  4. 使用的内存少于HashMap<Integer,T>(因为这会使键自动装箱并且可能不利用标量键类型)。
  5. 可以获取或设置摊销log(N)时间中的元素,其中N是条目数:不必是线性时间,二进制搜索是可以接受的。
  6. 在非病毒的开源纯Java库中实现(最好在Maven Central中)。

有人知道这样的实用程序类吗?

我曾希望Commons Collections有一个,但是似乎没有。

我遇到了org.apache.commons.math.util.OpenIntToFieldHashMap看起来几乎正确的东西,只是值类型是一个FieldElement无缘无故的值。我只想要T extends Object。看起来很容易将其源代码编辑为更通用的,尽管我宁愿使用二进制依赖项(如果有)。


问题答案:

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



 类似资料:
  • 我正在跟踪粒子到三维晶格中。每个晶格元素都有一个对应于展开的3D数组的索引 我对从S1单元到S2单元的过渡感兴趣。由此产生的过渡矩阵M(S1,S2)人口稀少,因为粒子只能在细胞附近到达。不幸的是,使用几何上接近的展开3D阵列单元的索引可能会在索引上有很大差异。例如,位于彼此顶部(例如z和z 1处)的单元格的索引将按宽度*深度移动。因此,如果我尝试累积得到的2D矩阵M(S1,S2),S1和S2将非常

  • 请看示例代码(注意 data 的数组下标): -- http://www.kyne.com.au/~mark/software/lua-cjson.php -- version: 2.1 devel local json = require("cjson") local data = {1, 2} data[1000] = 99 -- ... do the other things ngx.

  • 问题内容: 也就是说,如果我将当前时间用作数组的索引: 解释器将实例化从0到现在的所有元素吗?不同的浏览器会做不同的事情吗? 我记得AIX内核中曾经存在一个错误,该错误会在请求时创建伪tty,但是如果您说“ echo> / dev / pty10000000000”,它将创建/ dev / pty0,/ dev / pty1, ....然后跌倒死亡。在贸易展览会上这很有趣,但是我不希望这种情况发生

  • 问题内容: 有没有一种方法可以从a转换为,而不会在内存中生成密集矩阵? 不起作用,因为它生成一个密集矩阵,该矩阵被强制转换为。 提前致谢! 问题答案: 熊猫文档讨论了将稀疏稀疏性实验转换为SparseSeries.to_coo: http://pandas-docs.github.io/pandas-docs-travis/sparse.html#interaction-with- scipy-s

  • 问题内容: 我的磁盘中有40MB的文件,我需要使用字节数组将其“映射”到内存中。 最初,我认为将文件写入ByteArrayOutputStream是最好的方法,但我发现在复制操作期间的某个时刻它会占用约160MB的堆空间。 有人知道不使用三倍于RAM的文件大小的更好方法吗? 更新: 感谢您的回答。我注意到我可以减少内存消耗,告诉ByteArrayOutputStream初始大小比原始文件的大小稍大

  • 稀疏数组核心 第一行表示了稀疏数组的组成核心,稀疏数组一共只有三列 第一行第一列表示数组一共有多少行,第一行第二列表示数组一共有多少行,第一行第三列表示数组中有多少个特殊值 从第一行之后的所有行表示数据行,第一列表示数据所在的行数,第二列表示数据坐在的列数,第三列表述具体数据的值 def get_sparse_arr(arr: 'sparse_arr') -> 'sparse_arr':