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