lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 

一 . 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() {  

// Clearing all of the links between nodes is "unnecessary", but:  

// - helps a generational GC if the discarded nodes inhabit  

//   more than one generation  

// - is sure to free memory even if there is a reachable Iterator  

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()只是清除了对象的引用,使那些对象成为垃圾. 

 

 

posted on   白露~  阅读(42521)  评论(1编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示