GVKun编程网logo

为什么有人会在Java中使用Collections.emptyList?(java为什么使用集合)

15

在本文中,您将会了解到关于为什么有人会在Java中使用Collections.emptyList?的新资讯,同时我们还将为您解释java为什么使用集合的相关在本文中,我们将带你探索为什么有人会在Jav

在本文中,您将会了解到关于为什么有人会在Java中使用Collections.emptyList?的新资讯,同时我们还将为您解释java为什么使用集合的相关在本文中,我们将带你探索为什么有人会在Java中使用Collections.emptyList?的奥秘,分析java为什么使用集合的特点,并给出一些关于Collections.emptyList() 与新实例、Collections.emptyList()与新实例、Collections.emptyList()和Collections.EMPTY_LIST有什么区别、Collections.emptyList()而不是null检查?的实用技巧。

本文目录一览:

为什么有人会在Java中使用Collections.emptyList?(java为什么使用集合)

为什么有人会在Java中使用Collections.emptyList?(java为什么使用集合)

我试图了解使用以下命令创建列表的新实例之间的区别:

new ArrayList<X>

Collections.emptyList();

据我了解,稍后将返回一个不可变的列表。这意味着无法添加,删除或修改它。我想知道为什么会创建一个不可变的emptyList?有什么用?谢谢

答案1

小编典典

假设您必须返回一个集合,并且您不想每次都创建几个对象。

interface Configurable {    List<String> getConfigurationList();}// class which doesn''t have any configurationclass SimpleConfigurable implements Configurable {    public List<String> getConfigurationList() { return Collections.emptyList(); }}

返回空集合通常比返回更可取 null

Collections.emptyList() 与新实例

Collections.emptyList() 与新实例

在实践中,最好返回一个这样的空列表:

return Collections.emptyList();

或者像这样:

return new ArrayList<Foo>();

还是这完全取决于您将如何处理返回的列表?

Collections.emptyList()与新实例

Collections.emptyList()与新实例

在实践中,是能够更好地返回一个空列表像这样:

return Collections.emptyList();

或者像这样:

return new ArrayList<Foo>();

还是这完全取决于您要对返回的列表执行什么操作?

答案1

小编典典

主要区别是Collections.emptyList()返回一个
不可变的
列表,即不能向其添加元素的列表。(同样适用List.of()于Java
9中引入的内容。)

在极少数情况下,您 需要修改返回的列表,Collections.emptyList()List.of()因此 不是 一个好的选择。

我想说,只要合同(文档)没有明确声明不同的状态,返回一个不可变的列表就很好(甚至是首选的方式)。


此外,emptyList()
可能不会在每次调用时都创建一个新对象。

此方法的实现无需为每个调用创建单独的List对象。使用此方法可能具有与使用类似名称的字段相当的成本。(与这种方法不同,该字段不提供类型安全性。)

执行的emptyList外观如下:

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

因此,如果经常调用您的方法(返回一个空列表),则此方法甚至可以在CPU和内存方面为您提供更好的性能。

Collections.emptyList()和Collections.EMPTY_LIST有什么区别

Collections.emptyList()和Collections.EMPTY_LIST有什么区别

在Java中,我们具有Collections.emptyList()和Collections.EMPTY_LIST。两者具有相同的属性:

返回空列表(不可变)。该列表是可序列化的。

那么使用一个或另一个之间的确切区别是什么?

答案1

小编典典
  • Collections.EMPTY_LIST 返回旧样式 List
  • Collections.emptyList() 使用类型推断,因此返回 List<T>

在Java 1.5中添加了Collections.emptyList(),它可能始终是首选 。这样,您无需在代码中不必要地转换。

Collections.emptyList()从内在上 为你 做演员。

@SuppressWarnings("unchecked")public static final <T> List<T> emptyList() {    return (List<T>) EMPTY_LIST;}

Collections.emptyList()而不是null检查?

Collections.emptyList()而不是null检查?

如果我在某个类中有一个很少使用的集合,该集合可能被实例化很多次,则有时我可能会求助于以下“习惯用法”以节省不必要的对象创建:

List<Object> list = null;

void add(Object object) {
    if (list == null)
        list = new ArrayList<Object>();

    list.add(object);
}

// somewhere else
if (list != null)
    for (Object object : list)
         ;

现在,我想知道是否无法使用来消除这些空检查Collections.emptyList(),但是我将不得不add()像这样更改if检查:

if (list == Collections.<Object>emptyList())
    list = new ArrayList<Object>();

除了每次都分配一个新的空集合以外,还有更好的方法来处理此问题吗?

编辑: 为了清楚起见,我
使用Collections.emptyList(),但是在add()中进行上述检查确实非常丑陋……我想知道是否有更好的方法甚至是其他方法处理这个。

我们今天的关于为什么有人会在Java中使用Collections.emptyList?java为什么使用集合的分享已经告一段落,感谢您的关注,如果您想了解更多关于Collections.emptyList() 与新实例、Collections.emptyList()与新实例、Collections.emptyList()和Collections.EMPTY_LIST有什么区别、Collections.emptyList()而不是null检查?的相关信息,请在本站查询。

本文标签: