码迷,mamicode.com
首页 > 其他好文 > 详细

ArrayList.clear、=null、new Arraylist之间的对比区别

时间:2018-07-12 13:12:45      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:str   使用方法   target   垃圾回收器   部分   data   需要   参考   arraylist   

参考博文

1.使用ArrayList的对象方法clear()

1 List list = new ArrayList();
2 List list1 = list;
3 list.add(1);
4 list.add(2);
5 list.add(3);
6 list.clear();

 ArrayList对象内部维护一个对象数组elementData, 当执行clear()方法时, 会执行循环将elementData中每一个坐标都设置为为null, 并设置数组的size为0;我们还可以使用该list进行操作

clear源码如下

public void clear() {
        modCount++;

        // clear to let GC do its work
        for (int i = 0; i < size; i++)
            elementData[i] = null;

        size = 0;
}

2. 使用=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变量仍然指向原内存空间,原内存空间得不到释放

3. 使用= new ArrayList()

方法3有点类似于方法1,都是得到一个空的ArrayList对象。不过new ArrayList()会得到一个初始化内部数组elementData容量为10的ArrayList对象,而方法1得到的对象的容量与原对象一致。值得注意的是使用方法3需要进行如在内存中重新开辟内存空间等操作,开销较大,如果只是单纯的想要使用空的ArrayList对象,建议使用方法1,相对来说可尽量避免堆内存溢出问题。

 

ArrayList.clear、=null、new Arraylist之间的对比区别

标签:str   使用方法   target   垃圾回收器   部分   data   需要   参考   arraylist   

原文地址:https://www.cnblogs.com/chenpt/p/9297979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!