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

  • 相关阅读:
    how to uninstall devkit
    asp.net中bin目录下的 dll.refresh文件
    查找2个分支的共同父节点
    Three ways to do WCF instance management
    WCF Concurrency (Single, Multiple, and Reentrant) and Throttling
    检查string是否为double
    How to hide TabPage from TabControl
    获取当前系统中的时区
    git svn cygwin_exception
    lodoop打印控制具体解释
  • 原文地址:https://www.cnblogs.com/djoel/p/6934852.html
Copyright © 2011-2022 走看看