`

Java_Collections.EMPTY_LIST

    博客分类:
  • Java
 
阅读更多

ref: http://moto0421.iteye.com/blog/1447836

 

1.背景

在某些情况下,我们经常需要发挥一个空的集合对象,比如说在数据查询时,并不需要发挥一个NULL或是异常,那么就可以返回一个空的集合对象。

如果你想 new 一个空的 List ,而这个 List 以后也不会再添加元素,那么就用 Collections#emptyList() 好了。 new ArrayList() 或者 new LinkedList() 在创建的时候有会有初始大小,多少会占用一内存。

假如你有很多这样的方法,那么其实可以直接返回 emptyList 了,大家共享一个对象,节省内存开销。

JDK提供了两个方式来返回集合对象,那么两者有何区别呢?那就看代码吧!

 

2.源码解析

//EMPTY_LIST 是Collections定义的一个静态属性,是一个类变量,可以直接返回使用  

 public static final List EMPTY_LIST = new EmptyList();  

  

//这个是emptyList的代码  

 public static final <T> List<T> emptyList() {  

    return (List<T>) EMPTY_LIST;  

    } 

 

从上面我们可以看出,emptyList不过是对EMPTY_LIST做了一个泛型支持。这点上我们就可以很清晰的了解两者不同的使用场景了!若是不需要泛型的情况,可以直接使用Collections,反之则使用emptyList().

 

3.使用

对于EMPTY_LIST就不多介绍了,我们可以直接使用Collections.EMPTY_LIST。

对于Collections.emptyList()的使用有点需要注意的地方。

若是定义了一个变量来保存这个空集合的话,那么没有问题。

List<Person> emptyPersonList = Collections.emptyList(); //编译器会自动转化。  

若是在某个场景下需要将空对象进行赋值那么就需要如下写法

organization.setPersonList(Collections.<Person> emptyList());

 

4.虽然在源码中存在

public int size() {return 0;}  

 public Object get(int index) {  

          throw new IndexOutOfBoundsException("Index: "+index);  

 }  

但是对于我们无论是 

 for (int i =0 ; i < ...)还是 for (Person p : personList)都不会调用到get(int index)这个方法,可以放心使用!前一种方式我们可以很好理解,因为首先是调用了size().后者foreach的实现原理还需要考究下!

 

注:

它不支持Add功能,调用Add会抛出unsupportedException,

在以后要返回一个空的List,并还需要后续操作时,不能使用Collections.emptyList()方法,看文档发现,List的实现类都有自己的实现,而返回的EmptyList的实现没有实现add(int index, E element方法,使用了

    AbstractList.add(int index, E element){

     throw new UnsupportedOperationException();

    }

 

Collections.EMPTY_MAP,Collections.EMPTY_SET 类似

分享到:
评论

相关推荐

    JDK_API_1.8_google.rar

    Java 1.8为集合类如List、Set和Map添加了丰富的工厂方法,使得创建集合更加方便,如`Collections.emptyList()`、`Arrays.asList()`等。 总结,JDK 1.8在多个方面带来了重大改进,提升了开发效率,降低了错误率,...

    JDK_API_1_8.zip

    集合接口(如 `List`, `Set`, `Map`)新增了多种工厂方法,可以直接创建预填充的集合实例,比如 `Collections.emptyList()`, `Collections.singleton()`, `Map.of()` 等,使得代码更加简洁。 9. **重复注解** 在 ...

    构建JavaAPI的艺术:Do's_and_Don'ts_英文.pdf

    同样,对于集合(List、Set、Map、Iterator)和其他容器,可以使用`Collections.emptyList()`, `Collections.emptySet()`, `Collections.emptyMap()`等静态工厂方法来返回空实例。 3. **流(Stream)**:对于流,可以...

    JAVA_API_1.7中文版

    8. **集合工厂方法**:Java 1.7对集合框架进行了优化,添加了工厂方法,如`Collections.emptyList()`, `Collections.singleton()`, `Map.of()`, 等,方便创建不可变的集合实例。 9. **元注解的可重复性**:从Java ...

    javaclooections类.docx

    - `Collections.EMPTY_LIST`、`Collections.emptyList()`:返回一个不可变的空List实例。 - `Collections.EMPTY_MAP`、`Collections.emptyMap()`:返回一个不可变的空Map实例。 - `Collections.EMPTY_SET`、`...

    Java_集合框架_课件

    `Collections`类中提供了一些枚举常量,如`Collections.EMPTY_LIST`、`Collections.EMPTY_MAP`和`Collections.EMPTY_SET`,用于表示空的集合。 6. **集合工具类**: `Collections`类提供了许多静态方法,用于对...

    吐血推荐17个提升开发效率的“轮子”.doc

    4. 返回空集合:Collections.emptyList() 方法可以返回空集合。 例如: private List fun(List list) { if (list == null || list.size() == 0) { return Collections.emptyList(); } //业务处理 return list;...

    javasrc源码-Java8SourceCode:java8源码(jdk1.8.0_131.jdksrc.zip)

    例如,`Arrays.sort(list, Collections.reverseOrder())`中的`Collections.reverseOrder()`就是一个方法引用。 8. **Nashorn JavaScript引擎**: Java 8引入了一个新的JVM内置的JavaScript引擎,名为Nashorn,使得...

    JAVA_JDK_1.7

    在`Collections`和`Arrays`类中添加了一些静态工厂方法,如`Collections.emptyList()`, `Collections.emptyMap()`等,可以更方便地创建不可变的集合实例。 11. **改进的异常处理**: 允许一个`catch`子句捕获多个...

    6种方法初始化JAVA中的list集合

    List&lt;String&gt; emptyList = Collections.emptyList(); ``` 4. 匿名内部类 利用匿名内部类可以一次性初始化List,这种方式在代码中看起来比较简洁。 ```java List&lt;String&gt; names = new ArrayList() {{ add("Tom"); ...

    jdk1.8.102 java8

    7. **新的集合工厂方法**:在`Collections`和`Arrays`类中添加了新的工厂方法,用于创建不可变集合和数组,如`Collections.emptyList()`、`Arrays.asList()`等。 8. **改进的类型推断**:Java 8增强了类型推断能力...

    高手总结java常用API.

    11. **集合工厂方法**: Java 8引入的集合工厂方法,如Collections.emptyList()、Arrays.asList()等,使得创建集合更加简洁。 12. **Lambda表达式**: Java 8引入的特性,简化了对功能性接口的匿名类实例化,提高了...

    java api1.6、1.7

    1. **多版本选择语法**:允许导入特定版本的库,如`&lt;import static java.util.Collections.emptyList;&gt;`, 提高了代码的可读性。 2. **钻石操作符**:对于匿名类型实例化,如`List&lt;String&gt; list = new ArrayList();`...

    559.557.JAVA基础教程_集合-Collections工具类常用方法的测试(559).rar

    最后,Collections工具类还包含一些实用的静态工厂方法,如`emptyList()`、`emptyMap()`和`singletonMap(K key, V value)`,它们分别用于创建空列表、空映射以及只有一个键值对的映射。 总结起来,Collections工具...

    Java多线程安全集合

    例如`Collections.unmodifiable*`方法创建的集合和`java.util.Collections`类中的`emptyList()`、`emptySet()`等。这些集合一旦创建就不能修改,因此天然线程安全。 示例代码: ```java import java.util.*; ...

    Java空集合使用场景与填坑记录

    Collections.emptyList()是Java集合工具类中提供的一种创建空集合的方法。这种方式创建的空集合,不允许你往集合中添加元素和删除元素,也就是不能调用相应add()和remove()方法。例如:List&lt;String&gt; list = ...

    Ukeoppgaver_generics_collections

    6. **集合工厂方法**:如`Collections.emptyList()`, `Collections.singletonList()`, `Collections.singletonMap()`等简化了创建集合的操作。 7. **集合转换**:`Collection.toArray()`和`Arrays.asList()`等方法...

    leon9dragon#all_blogs#061.JAVA集合框架_Arrays类和Collections类1

    1.1. Arrays 类的常用方法 1.2.1. emptyList()/emptyMap()/emptySet() 方法 1.2.7. synchroniz

    JAVA_JDBC面向对象分页(初步设计二之oracle)

    return Collections.emptyList(); } ``` 这个方法接受页数和每页大小作为参数,然后执行SQL查询并填充结果到一个对象列表中。注意使用try-with-resources语句来自动关闭数据库资源。 为了进一步封装和优化,我们...

Global site tag (gtag.js) - Google Analytics