java - 为什么像 List/Map/Set.of(...) 或 Arrays.asList(...) 这样的方法会返回不可变列表?

标签 java list java-9

返回不可变列表而不是可变列表背后的原因是什么?

最佳答案

性能

下面是 Oracle JDK 9 Documentation 的摘录:

For optimal performance, the immutable collections store a data set that never changes. However, you may be able to take advantage of the performance and space-saving benefits even if your data is subject to change. These collections may provide better performance than the mutable collections, even if your data changes occasionally.

List#of是静态工厂方法,它提供了一种便捷的方式来创建不可变列表。换句话说,它是创建不可变列表的便捷方法。在 Java-9 之前,这可以通过单独的 API 实现,例如 Collections#unmodifiableList .

如果你想获取一个可变列表,可以用这个不可变列表作为参数实例化一个ArrayList

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> mutableList = new ArrayList<>(List.of("A", "B", "C"));
        mutableList.add("D");
        System.out.println(mutableList);
    }
}

输出:

[A, B, C, D]

关于java - 为什么像 List/Map/Set.of(...) 或 Arrays.asList(...) 这样的方法会返回不可变列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64636934/

相关文章:

java - 有条件地将项目添加到 HashMap 的有效方法

java - 为什么 Java 9 不简单地将类路径上的所有 JAR 都变成自动模块?

java - Jdk9/java-9中module-info.java编译错误如何解决

java - Guava com.google.common.net.InetAddresses

java - 在无限循环中使用匿名类与嵌套类(Java)

c# - 在另一个列表中添加列表副本的最佳方法是什么?

r - 根据对象名称的字符向量创建列表

java - 为什么此照明代码仅适用于单个灯光,而当我添加多个灯光时会中断?

java - 如何确定用户是否触摸了我的位图?

python - 将 Python 列表就地转换为 Numpy 数组