首页 > 编程语言 >Java_Collections.EMPTY_LIST

Java_Collections.EMPTY_LIST

时间:2023-06-08 22:38:01浏览次数:62  
标签:Java emptyList LIST List Collections new EMPTY



 

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 类似

标签:Java,emptyList,LIST,List,Collections,new,EMPTY
From: https://blog.51cto.com/u_16070335/6443756

相关文章

  • Java_Timer
     Java_Timer ava.util.Timer是一个实用工具类,该类用来调度一个线程,使它可以在将来某一时刻执行。Java的Timer类可以调度一个任务运行一次,或定期运行。 java.util.TimerTask是一个抽象类,它实现了Runnable接口。我们需要扩展该类以便创建自己的TimerTask,这个TimerTask内部使用jav......
  • 02-前端-javaScript
    文章目录JavaScript1,JavaScript简介2,JavaScript引入方式2.1内部脚本2.2外部脚本3,JavaScript基础语法3.1书写语法3.2输出语句3.3变量3.3.1全局变量var3.3.2局部变量let3.3.3常量const3.4数据类型3.5运算符3.5.1\==和===区别▲3.5.2类型转换3.6流程控制语句3.6.1if......
  • javaWeb核心02-Request&Response -(乱码处理、字符流、字节流、虚拟目录、请求转发、重
    文章目录Request&Response1,Request和Response的概述2,Request对象2.1Request继承体系2.2Request获取请求数据2.2.1获取请求行数据2.2.2获取请求头数据2.2.3获取请求体数据2.2.4获取请求参数的通用方式基于上述理论,request对象为我们提供了如下方法:★代码演示2.3IDEA快速创......
  • Java数据类型、数组
    Java数据类型基本数据类型(8种)byte\short\int\long\;float\double;char\boolean引用数据类型类、数组、接口、枚举、注解、记录一维数组packagecom.study.onearray;publicclassOneArrayTest01{//快捷方式:psvm+回车,快速生成main方法......
  • 讲真,这三道Java入门级面试题,你也不一定能搞定
    下面是一道入门级面试题,这道题基本上都是问初级的小伙伴比较多,但如果你是中级,或者高级。我觉得未必都能回答上来。说说Java语言有哪些特点尽量答出以下几个关键词:1)简单易学。Java有丰富的类库,能够通过静态方法封装,降低API的学习成本,提高工作效率。2)面向对象。这个也是Java最重要的......
  • 给小白讲java中两大怪物,附带面试题!
    类介绍Java程序是由若干个类组成的,类也是面向对象编程思想的具体实现。以下为类的定义:publicclassUser{//私有属性privateLonguserId;privateStringname;privateIntegerage;//构造方法publicUser(){}//有残构造方法publ......
  • 如何吃透一个Java项目?
    现在Austin的文档我觉得还是比较全的,但到了看代码的时候,可能有的同学就不知道应该怎么看,有想知道模块之间的调用链路,有想一点一点把细节给全看了。这时候就很可能在项目里犯迷糊了,绕不出不来了。Java开源项目消息推送平台......
  • Java 的 8 种异步实现方式
    异步的八种实现方式线程ThreadFuture异步框架CompletableFutureSpring注解@AsyncSpringApplicationEvent事件消息队列第三方异步框架,比如Hutool的ThreadUtilGuava异步1.线程异步public class AsyncThread extends Thread {    @Override    public vo......
  • Java反射机制详解上篇
    1反射机制是什么反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。在面向对象的世界里,万事万物皆对象.在java语言里,静态的成员,普......
  • Java多态综合案例(包含接口,接口实现类)
    首先定义一个接口名为USB其次定义两个实现类分别名为KeyBorad和Mouse此时就可以使用多态了,因为实现类和接口某种意义上来说是继承关系。USBu=newKeyborad();USBu2 =newMouse();因为键盘和鼠标都具有插拔功能,所以为了方便,把这两个功能写入接口,然后实现类重写。pac......