ArrayList.clear()是否将数组调整为尽可能小的大小?

时间:2012-12-22 09:50:28

标签: java arraylist

如果我理解ArrayLists,它们会被一个数组支持,该数组在完整时会自动调整大小。 在调用clear()时,ArrayList是否调整为可能的最小数组大小?

4 个答案:

答案 0 :(得分:10)

不,不是,这是一个需要牢记的问题。假设ArrayList的内部Object []增长到1000000个元素。现在你调用ArrayList.clear()。这会将所有1000000个元素设置为null,将内部大小设置为0. Nulling 1000000是一个耗时的操作,而ArrayList仍然会在堆上占用1000000 x 4个字节的Object []。您可以在clear()之后调用ArrayList.trimToSize()但是有一个catch - 您首先清除了1000000个元素然后将它们扔掉。在这种情况下,更好的解决方案是重新创建ArrayList - new ArrayList()。

答案 1 :(得分:1)

大小设置为0,但没有明确发生的调整大小
这是实际的代码。

     public void  clear() {
         modCount++;
         // Let gc do its work
         for (int i = 0; i < size; i++)
             elementData[i] = null;
         size = 0;
     }

请检查此link

答案 2 :(得分:0)

大小设置为零。 arrayList.clear()将arraylist中包含的所有对象设置为null。但是这并不能确保arraylist中包含的所有对象都是垃圾收集的。在其他地方引用的对象在收集所有引用之前都不会收集垃圾。

答案 3 :(得分:0)

减少清除后可能需要使用trimToSize()的大小。通常这不会完成,因为它没有太大的区别,除非你想要保存许多MB的数组。更常见的解决方案是在这种情况下替换ArrayList。 (我不是说那更好)