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