Collection工具類中的 emptyMap() 、emptySet() 、emptySet()

Collections主要封裝了對collection進行操作的靜態方法,其中三個方法是 emptyMap() 、emptySet() 、emptySet(),主要是返回空的,但是不可變的Map,Set、List。

 public static final <T> List<T> emptyList() {
     return (List<T>) EMPTY_LIST;
 }
 public static final <K,V> Map<K,V> emptyMap() {
     return (Map<K,V>) EMPTY_MAP;
 }
 public static final <T> Set<T> emptySet() {
     return (Set<T>) EMPTY_SET;
 }

 使用Collections.emptyXXX() 的好處

  1.可以是代碼的可讀性變得更好,避免產生空指針異常

public Map query(Integer uid){  
}

  例如 有上面的查詢方法,如果該方法經過執行後,沒有查詢出任何數據,我們可以直接返回Collections.emptyMap(),這樣一下子就可以知道查詢結果爲空,而且可以避免產生NullPointerException;另外,我公司使用了sonar進行代碼質量檢查,如果直接new 一個空Map 就會認爲是 阻斷性 錯誤,new產生的Map沒有被使用。這個時候,就可以使用該方法了。

      2.可以提高某些場景的性能和效率

  該方法返回的是一個static final的靜態內部類Map、Set、List,這些內部類繼承自AbstractMap、AbstractSet、AbstractList,重寫了部分方法,從而保證了在多次調用Collections.emptyXXX()方法的時候,返回的都是同一個實例,將不需要每次都創建一個新的實例,分配新的空間。

  對於Collections.emptyXXX()方法產生的集合,不能被更改,否則會拋異常:

複製代碼
import java.util.*;

public class CollectionsDemo {
   public static void main(String args[]) {
      // create an empty set    
      Set emptyset = Collections.emptySet();
      
      System.out.println("Created empty immutable set: "+emptyset);  
      
      // try to add elements
      emptyset.add("Adding");
   }    
}
複製代碼

讓我們來編譯和運行上面的程序,這將產生以下結果。該組是不可變的,這麼添加元素將拋出異常。

Created empty immutable set: []
Exception in thread "main" java.lang.UnsupportedOperationException

抄襲自博文:

  1.http://thecodesample.com/?p=80

  2.http://www.coderanch.com/t/536728/java/java/Collections-emptySet-Collections-emptyList-Collections

  3.http://www.yiibai.com/java/util/collections_emptyset.html

  4.http://stackoverflow.com/questions/14846920/collections-emptymap-vs-new-hashmap

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章