java - 在 Java 中增长数组的最节省内存的方法?

标签 java arrays performance

我不太关心时间效率(操作会很少),而是内存效率:我可以在不将所有值暂时保存两次的情况下扩大数组吗?

有没有比创建一个新数组并复制所有值更有效的方法来增加一个大数组?比如,将它与一个新的连接起来?

将固定大小的数组存储在另一个数组中并重新分配/复制该顶级数组怎么样?这会保留实际值吗?

我知道 ArrayList,但我需要对访问数组进行大量控制,并且访问需要非常快。例如,我认为我更喜欢 a[i] 而不是 al.get(i)

我关心这个的主要原因是,有问题的数组(或许多这样的数组)很可能会占用足够大的主内存部分,以至于在丢弃原始数据之前创建双倍大小副本的常用策略可能行不通。这可能意味着我需要重新考虑整体策略(或提高我的硬件建议)。

最佳答案

动态调整“数组”或项目列表大小的最佳方法是使用 ArrayList .

Java 已经在该数据结构中内置了非常有效的大小调整算法。

但是,如果必须调整自己的数组大小,最好使用 System.arraycopy()Arrays.copyOf()

Arrays.copyOf() 最简单的用法是:

int[] oldArr;
int newArr = Arrays.copyOf(oldArr, oldArr.length * 2);

这将为您提供一个新数组,其中包含与旧数组相同的元素,但现在有多余的空间。

Arrays类一般有很多处理数组的好方法。

还有

确保每次添加元素时不只是将数组增加一个元素,这一点很重要。最好实现一些策略,您只需每隔一段时间调整一次数组的大小。 调整数组大小是一项代价高昂的操作。

关于java - 在 Java 中增长数组的最节省内存的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1427200/

相关文章:

Java读取学生记录并计算每次测验的高低和平均值

jquery - 将html表中的所有数据获取到数组中

java - 计算java中完成一个函数的平均时间

performance - 在 MATLAB 中获取给定索引矩阵的元素的最快方法

java - 将通用 jar 保留在服务器库中,然后将其作为 war 分发的一部分是否更有效?

java - Hibernate for SQLite 支持 envers 吗?

java - 使用 Java 从 Lotus Notes 电子邮件中提取附件

java - Maven 包含父类

Java Junit 精准Benchmarking 复杂性总结

java - 属性文件位置java