当我们删除元素时,ArrayList的容量会降低吗?

2022-09-01 09:00:50

ArrayList 的默认容量为 10 个对象。当大小超过 10 个对象时,ArrayList 将在内部增加其容量。当我们从 ArrayList 中删除对象时,容量是否会降低。

如果 ArrayList 容量不减少,这是否会导致性能问题?


答案 1

它不会自动减少这一点。从文档。

    public void trimToSize() 

将此 ArrayList 实例的容量修剪为列表的当前大小。应用程序可以使用此操作来最小化 ArrayList 实例的存储。


答案 2

arraylist中有几个删除方法,我将使用按索引版本删除作为此示例

 public E remove(int index) {

     rangeCheck(index);
     modCount++;
     E oldValue = elementData(index);

     int numMoved = size - index - 1;

     if (numMoved > 0)
           System.arraycopy(elementData, index+1, elementData, index,
                    numMoved);

     elementData[--size] = null; // Let gc do its work


     return oldValue;

 }

需要注意的最重要的事情是,永远不会在其中创建新数组,因此其大小不会更改,只会复制元素。elementData

如果需要减少阵列列表的容量(通常不会使用),请使用trimToSize()