美文网首页Java集合
list.clear()与list = null 区别

list.clear()与list = null 区别

作者: 奇点一氪 | 来源:发表于2019-08-21 18:01 被阅读259次

一 . list.clear()底层源码实现

在使用list 结合的时候习惯了 list=null ;在创建这样的方式,但是发现使用list的clear 方法很不错,尤其是有大量循环的时候

1、list 接口 的ArrayList 类的clear() 方法源码

如下:

/** 
     * Removes all of the elements from this list.  The list will 
     * be empty after this call returns. 
     */  
public void clear() {  
        modCount++;  
// Let gc do its work  
            for (int i = 0; i < size; i++)  
                elementData[i] = null;  
                 size = 0;  
} 

我们从中可以发现就是将list集合中的所有对象都释放了,而且集合也都空了,所以我们没必要多次创建list 集合而只需要调用一下 clear() 方法就可以了。

2、list 接口 的LinkedList类的clear() 方法源码

如下:

public void clear() {  
for (Node<E> x = first; x != null; ) {  
           Node<E> next = x.next;  
           x.item = null;  
           x.next = null;  
           x.prev = null;  
           x = next;  
       }  
       first = last = null;  
       size = 0;  
       modCount++;  
   }

从上面我们可以看到,不管是哪个实现类的clear 方式都是将里面的所有元素都释放了并且清空里面的属性 ,这样我们就不用在释放 创建新对象来保存内容而是可以直接将现有的集合制空再次使用。

二. list.clear()与list = null 区别

  • java中list集合通过clear()方法清空,只会将list中的对象变成垃圾回收清空,但是list对象还是存在。

  • 但是通过list=null后,不仅列表中的对象变成了垃圾,为列表分配的空间也会回收,什么都不做与赋值NULL一样,说明直到程序结束也用不上列表list了,它自然就成为垃圾了.clear()只是清除了对象的引用,使那些对象成为垃圾.

  • =null还没有立刻把内存清掉,要调用GC.Collect();才会清掉内存,

  • Clear方法和=null差不多,也不会马上把内存清掉,直到GC.Collect()调用为止(如果你不调用的话系统会在适当的时机调用)。不过调用list.Clear();会减轻GC.Collect方法的负担,使其能更快完成清除内存的工作

不用了,就设置为null,如果还要new一个使用,那不如Clear了继续用得好。因此单独比较内存释放是没有意义的,要看具体场合用具体的功能。
另外在局部变量时,离开作用域自动释放,相当于赋值null,因此一般很少有人会特意使用这个null的。
所以如果元素很多,做法通常是这样的:
list.Clear();
list=null;
GC.Collect();
但GC.Collect();通常会消耗很多时间,所以如果数组元素不多的情况没必要直接调用GC.Collect,让系统在它感到不适的时候自动调用GC.Collect为好。

在此说明一下list!=null和list.size()的区别:
1、list==null,意味着list压根没有地址,在堆内就不存在,说明其没有进行初始化,这时llist调用任何方法都会抛出空异常。

2、list.size()=0,意味着堆内有list,但是还没来得及放元素,其长度随着元素数量变化而变化,暂时为零。

相关文章

  • list.clear()与list = null 区别

    一 . list.clear()底层源码实现 在使用list 结合的时候习惯了 list=null ;在创建这样的...

  • Android 集合判空处理

    list.isEmpty() list.size()==0 list==null的区别: 1. isEmpty()...

  • java常用集合List Set Map 子类源码分析实现原理

    集合相关 List跟Set的区别两个接口都继承Collection,区别list有序且可以添加多个null元素,也...

  • 数据结构

    1、List,Set,Map的区别? List: 1.可以允许重复的对象。 2.可以插入多个null元素...

  • Java集合

    一、List、Set、Map的区别。 List: 1. 可以有重复的对象。 2. 允许存放多个null元素。 3....

  • 02-相关问题

    undefined 与 null 的区别? undefined :代表定义未赋值 null :null 定义并赋值...

  • ORM - 'null' vs 'bla

    Django 层次的null与blank的区别 blank、null默认都是False null is for t...

  • 回答

    LIST和SET区别 List:1.可以允许重复的对象。 2.可以插入多个null元素。 3.是一个有序容器,保...

  • TypeScript 基础语法

    1、void 与 undefined和 null 与 void的区别是,undefined 和 null是所有类...

  • 从尾到头打印单链表

    void reversePrint(LinkList list) { if(list==NULL) { ...

网友评论

    本文标题:list.clear()与list = null 区别

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