Java ArrayList 存储

标签 java memory arraylist

我知道 ArrayLists 引用是连续存储在堆中的。但是,如果我将一个元素添加到数组列表的中间

ArrayList<Double> list = new ArrayList<Double>(Collections.nCopies(10, 6.5));

list.add(5, 20.0);

这如何改变它在堆中的存储方式?第一个引用的位置是否移动到新的存储单元,或者所有内容都刚刚移动过存储单元 5 在插入 20.0 后向下移动?

最佳答案

视情况而定。

ArrayList 视为(内部)固定大小的缓冲区,只要空间用完就会调整大小。如果你试图在中间插入一个元素,而缓冲区中还有剩余空间,那么一切都可以简单地向下移动以为新元素腾出空间。但是,如果没有剩余空间,则需要调整缓冲区的大小,这需要重新分配它,而这又可能需要将所有元素复制到内存中的新位置。请注意,将缓冲区移动到新位置的决定不是由 Java 虚拟机做出的,而是由操作系统做出的。

关于Java ArrayList 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29044237/

相关文章:

java - Eclipse 代码重构 - Junits

java - CompletableFuture 无需阻塞即可获取结果

java - Spring数据JPA和可以为空的参数

python - 产生一个进程是处理 python 内存泄漏的好方法吗?

c - 64 位计算机如何更改内存中的一个字节?

java - 如何让RecyclerView重复列表

java - 将 Java 结果集转换为字符串数组

java - JSP中自定义标签的问题

linux -/proc/self/maps 使用 fwrite 坏地址错误将内存写入文件

android - kotlin 中的 Parcelable 对象中的 ArrayList<ArrayList<String>>