美文网首页
Java 关于 ArrayList.clear() 与 null

Java 关于 ArrayList.clear() 与 null

作者: Little丶Jerry | 来源:发表于2019-01-01 16:50 被阅读0次
    问:简单解释下你对 ArrayList.clear() 与 null 及 new ArrayList<E>() 赋值方式的理解?

    答:

    • 使用 ArrayList 对象的 clear() 方法一般写法如下:
    ArrayList<String> list = new ArrayList<String>();
    list.add("0");
    list.add("1");
    list.add("2");
    list.clear();
    

    上面的方式其实是因为 ArrayList 对象内部维护了一个对象数组 elementData,当执行 clear() 方法时,会执行循环将 elementData 中每一个元素都设置为 null,并设置数组的 size 为 0,是对 ArrayList 容器的一种清空释放,但是 ArrayList 对象还在。

    • 使用 list = null 的一般写法如下:
    ArrayList<String> list = new ArrayList<String>();
    list.add("0");
    list.add("1");
    list.add("2");
    list = null;
    

    上面的方式直接将变量 list 指向 null,通常当我们不需要再使用 ArrayList 对象时可以将变量值设为 null,以便 GC 可以运作并回收这部分内存空间。不过,需要注意的是当:仍有其他变量指向该对象时,即使讲变量 list 置为 null,垃圾回收器也无法回收该内存空间。如下:

    ArrayList<String> list = new ArrayList<String>();
    ArrayList<String> arraylist = list;
    list.add("0");
    list.add("1");
    list.add("2");
    list = null; // 此时list变量指向null,而arraylist变量仍然指向原内存空间,原内存空间得不到释放
    
    • 使用 list = new ArrayList() 方式有点类似于最上面的方式,都是得到一个空的 ArrayList 对象。不过 new ArrayList() 会得到一个初始化内部数组 elementData 容量为 10 的 ArrayList 对象,且会在内存中重新开辟内存空间,开销较大,如果只是单纯的想要使用空的 ArrayList 对象,建议直接 clear(),相对来说可尽量避免堆内存溢出问题。

    本文参考自 关于 ArrayList.clear() 与 null 及 new ArrayList<E>() 的一道笔试题

    相关文章

      网友评论

          本文标题:Java 关于 ArrayList.clear() 与 null

          本文链接:https://www.haomeiwen.com/subject/jegnlqtx.html