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

Java 为什么像List/Map/Set.of(…)或Arrays.asList(…)这样的方法返回一个不可变的列表?,java,list,java-9,Java,List,Java 9,返回不可变列表而不是可变列表的原因是什么?性能 以下摘录自: 为了获得最佳性能,不可变集合存储一个数据集 这永远不会改变。但是,您可以利用 性能和节省空间的好处,即使您的数据受到 改变这些集合可能比 可变集合,即使您的数据偶尔更改 是静态工厂方法,它提供了一种方便的方法来创建不可变的列表。换句话说,创建不可变的列表是一种方便的方法。在Java-9之前,这可以通过单独的API实现,如 如果希望获得可变列表,可以使用此不可变列表作为参数实例化ArrayList import java.util.Ar

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

性能 以下摘录自:

为了获得最佳性能,不可变集合存储一个数据集 这永远不会改变。但是,您可以利用 性能和节省空间的好处,即使您的数据受到 改变这些集合可能比 可变集合,即使您的数据偶尔更改

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

如果希望获得可变列表,可以使用此不可变列表作为参数实例化
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);
    }
}
演出 以下摘录自:

为了获得最佳性能,不可变集合存储一个数据集 这永远不会改变。但是,您可以利用 性能和节省空间的好处,即使您的数据受到 改变这些集合可能比 可变集合,即使您的数据偶尔更改

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

如果希望获得可变列表,可以使用此不可变列表作为参数实例化
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);
    }
}

Arrays.asList
不返回不可变列表。它返回一个固定长度的列表,因为它正在包装给定的显式数组。为什么返回一个可变列表?例如,出于实际原因。也许我想在以后添加或删除元素-我只是不明白为什么有这样的限制不能这样做。不变性是好的,因为它可以保护你不射中自己的脚。例如,
静态最终列表
实际上永远不适合修改。
数组。asList
不会返回不可变列表。它返回一个固定长度的列表,因为它正在包装给定的显式数组。为什么返回一个可变列表?例如,出于实际原因。也许我想在以后添加或删除元素-我只是不明白为什么有这样的限制不能这样做。不变性是好的,因为它可以保护你不射中自己的脚。例如,
静态最终列表
确实不适合修改。这不会回答“为什么像…这样的方法返回不可变列表?”这不会回答“为什么像…这样的方法返回不可变列表?”