Collections.emptyList()与new List实例

2023/06/07

1. 概述

在这个简短的教程中,我们将说明Collections.emptyList()和new一个列表实例之间的区别。

2. 不变性

java.util.Collections.emptyList()和新建列表(例如new ArrayList<>())之间的核心区别在于不变性。

Collections.emptyList()返回一个无法修改的列表(java.util.Collections.EmptyList)。

创建新的列表实例时,你可以根据实现对其进行修改:

@Test
public void givenArrayList_whenAddingElement_addsNewElement() {	 	 
    List<String> mutableList = new ArrayList<>();	 	 
    mutableList.add("test");	 	 
 
    assertEquals(mutableList.size(), 1);	 	 
    assertEquals(mutableList.get(0), "test");	 	 
}
	 	 
@Test(expected = UnsupportedOperationException.class)	 	 
public void givenCollectionsEmptyList_whenAdding_throwsException() {	 	 
    List<String> immutableList = Collections.emptyList();	 	 
    immutableList.add("test");	 	 
}

3. 对象创建

Collection.emptyList()只创建一次新的空列表实例,如源码所示:

public static final List EMPTY_LIST = new EmptyList<>();

public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

4. 可读性

当你想显式创建一个空列表时,Collections.emptyList()比new ArrayList<>()更好地表达了最初的意图。

5. 总结

在这篇切题的文章中,我们重点介绍了Collections.emptyList()和new一个列表实例之间的区别。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章