【问题标题】:Why Java ArrayList's remove() method implementation does not decrease the size of internal array data? [duplicate]为什么Java ArrayList 的remove() 方法实现不会减少内部数组数据的大小? [复制]
【发布时间】:2016-01-21 02:12:55
【问题描述】:

对于add() 方法,实现是elementData\[\] 数组的大小根据需要增长。但是,查看remove() 方法,它不会在删除元素时缩小大小。

我使用一个简单的代码进行了测试,elementData[]10 开始并不断增长。但是,当我使用remove() 方法删除所有元素时,elementData[] 的大小将停留在我完成添加所有元素的位置。

int testSize = 10000000;

ArrayList<Integer> alist = new ArrayList<Integer>();
// size of elementData[] is 10
for(int i = 0; i < testSize; i++) {
    alist.add(i);
}
// size of elementData[] is 13845150
for(int i = alist.size()-1; i >= 0; i--) {
    alist.remove(i);
}
// size of elementData[] remains at 13845150

这不是浪费内存吗?

【问题讨论】:

    标签: java arrays arraylist


    【解决方案1】:

    首先您应该注意,数组的大小一旦创建就无法更改。更改 ArrayList 的底层数组的大小需要将数组的全部内容复制到新数组中。

    当你增加大小时,你必须分配一个更大的数组,否则你无法容纳新的元素。 但是,从列表中删除时复制所有内容的性能开销是不值得的。内存通常比性能更受关注。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      相关资源
      最近更新 更多