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

Java ArrayList.clear()是否将数组大小调整为尽可能小的大小?,java,arraylist,Java,Arraylist,如果我理解ArrayList,它们由一个数组支持,该数组在满时会自动调整大小。 调用clear()时,是否将ArrayList的大小调整为可能的最小数组大小?大小设置为零arrayList.clear()将arrayList中包含的所有对象设置为null。但这并不能确保arraylist中包含的所有对象都将被垃圾收集。在删除所有引用之前,其他位置具有引用的对象将不会被垃圾收集。大小设置为0,但不会显式调整大小。 这是实际的代码 public void clear() {

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

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

大小设置为0,但不会显式调整大小。
这是实际的代码

     public void  clear() {
         modCount++;
         // Let gc do its work
         for (int i = 0; i < size; i++)
             elementData[i] = null;
         size = 0;
     }
public void clear(){
modCount++;
//让gc完成它的工作
对于(int i=0;i

请检查此项。

要减小在清除trimToSize()后可能需要使用的大小。通常情况下,这并没有做到,因为它不会产生太大的影响,除非您希望节省很多MB。更常见的解决方案是在这种情况下替换ArrayList。(我不是说这样更好)

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

只要看看源代码,我就知道了。for循环通过ArrayList将对象设置为null进行迭代。但这并不能回答我的问题。不,但是
ArrayList.trimToSize
可以。谢谢Greg,这个方法会起作用的。所以数组没有调整大小
size
只是使用的数组元素数。严格来说,当对象无法访问时,它们将被垃圾收集。