zoukankan      html  css  js  c++  java
  • 关于ArrayList.clear()与=null以及new ArrayList<E>()

    ArrayList是常用到的JCF类,用来保存类型相同的一组对象,并通过下标来快速访问指定对象。今天讨论的是当我们使用完ArrayList后应该选择怎样合适的处理方式。

    这里现在有三种方式如下:

    1. 使用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。

    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,相对来说可尽量避免堆内存溢出问题。

  • 相关阅读:
    移动开发iOS&Android对比学习--异步处理
    PHP中文乱码解决办法[转]
    在eclipse里配置Android ndk环境 适用于windows mac 和linux[转]
    android在更新ADT以后报java.lang.NoClassDefFound的解决办法
    在Mac OS下配置PHP开发环境
    在iOS中使用百度地图
    简单说明CentOS源码安装程序
    SecureFXPortable中文乱码
    从Linux下载文件到Windows没有换行问题
    从Windows复制文件到Linux显示乱码问题
  • 原文地址:https://www.cnblogs.com/djoel/p/6934852.html
Copyright © 2011-2022 走看看