首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Java 关于 ArrayList.clear()

Java 关于 ArrayList.clear()

问:简单解释下你对 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(),相对来说可尽量避免堆内存溢出问题。
返回列表