gpt4 book ai didi

Java ArrayList 存储

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:34 25 4
gpt4 key购买 nike

我知道 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/

25 4 0