咨询代码new ArrayList<>(Collections.emptyList())的含义
咨询代码new ArrayList<>(Collections.emptyList())的含义
嘿,我来给你拆解一下这段代码到底是啥意思~
这段代码List<SomeClass> someClassList = new ArrayList<>(Collections.emptyList())确实是在初始化一个空的ArrayList,不过其实是绕了个小弯子来完成这件事,我拆成两部分给你讲:
- 先看
Collections.emptyList():这个方法返回的是一个不可变的空列表实例——它是Java内置的一个单例空列表,不能对它执行add、remove这类修改操作,大小固定为0。 - 再看
ArrayList的构造方法new ArrayList<>(Collections.emptyList()):这个构造方法的作用是把传入的集合里的所有元素复制到新创建的ArrayList中。因为传入的是空列表,所以最终得到的someClassList就是一个可以正常修改的空ArrayList——之后你完全可以给它添加、删除元素,和普通的空ArrayList没啥区别。
不过这里有个小细节:其实直接写new ArrayList<>()就能得到一样的可修改空列表,效果几乎完全一致(JDK8及以后,ArrayList无参构造的初始底层数组容量也是0)。用new ArrayList<>(Collections.emptyList())属于多此一举的写法,可能是某些开发者的习惯,或者想刻意强调“我要的就是空列表”,但实际没必要。
如果你的场景里不需要修改这个列表,那直接用Collections.emptyList()会更高效,因为它是复用的单例,不用每次创建新的ArrayList对象。
总结一下:
- 这段代码的最终结果:得到一个大小为0、支持修改操作的ArrayList实例
- 更简洁的等价写法:
List<SomeClass> someClassList = new ArrayList<>();
备注:内容来源于stack exchange,提问作者Corporativo
相关产品推荐
相关产品推荐

