if(list != null && list.size() > 0)優化,集合判空優雅的實現方式


需要一個工具包:

if(userList != null && userList.size() > 0) ===》》 CollectionUtils.isNotEmpty(userList);

public static boolean isEmpty(Collection coll) {
        return coll == null || coll.isEmpty();
    }

  public static boolean isNotEmpty(Collection coll) {
        return !isEmpty(coll);
    }


package com.sun.tools.javac.util;
public class List<A> extends AbstractCollection<A> implements java.util.List<A> {
    public A head;
    public List<A> tail;
    public boolean isEmpty() {
        return this.tail == null;
    }

package java.util;
public class ArrayList<E> extends AbstractList<E>   implements List<E>, RandomAccess, Cloneable, java.io.Serializable{
  public boolean isEmpty() {
        return size == 0;
    }
}

 .........
 }  

 

list.isEmpty() 和 list.size()==0 有啥區別呢?答案:沒有區別 。

  • isEmpty()判斷有沒有元素,而size()返回有幾個元素,
  • 如果判斷一個集合有無元素 建議用isEmpty()方法.比較符合邏輯用法。
  • 但是直接調用可以會報 nullException。list可能不存在。
  • 所以我們需要先判一下null,然后利用 && 短路的特性,A && B ,當A不成立時B不會執行。

在此特別說明一下list!=null和list.size()>0的區別:

  1. list==null,意味着list壓根沒有地址,在堆內就不存在。
  2. list.size()=0 意思堆內有list但是還沒來得及放元素,其長度隨着元素數量變化而變化,暫時為零。
  3. list如果為null的話,說明沒有進行初始化。這是list調用任何的方法都會拋出空異常。list.size()==0說明list已經被new過,但是里面沒有值。

③另外:
list.add(null)
會造成list.isEmpty() 為 false, list.size() 為1
所以代碼里要避免list.add(null)的陷阱

 

對於ArrayList來講。

 

  1. 千萬級別的數據量時,內部迭代要優於外部迭代,單位相差200ms左右 ,並發的相對慢一點。
  2. 百萬級別的數據量時,外部迭代要優於內部跌代,單位相差50ms左右。並發的要優於普通內部迭代。
  3. 所以一般使用外部迭代,通過for或者增強for循環
  4. 對於Java8的stream來講,使用時機,於數據量,機器都有關系。但Stream的出現是面向多核的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM