List.of和List.copyOf方法

我知道 List.of 和 List.copyOf 创建了原始列表的不可变克隆列表,所以在我的理解中,下面的代码在实际打印 [[1, 2]] 时应该打印 [1], [1, 2], [1, 2]?List.of 如何获取初始集合 col 的最新视图?

Collection<Number> col = new HashSet<>();
col.add(1);
var list1 = List.of(col); //1
col.add(2); //2
var list2 = List.copyOf(col); //3
System.out.println(list1+", "+list2);

回答

List.of创建一个以参数s作为元素的新列表。List.copyOf创建一个与单个 Collection参数具有相同元素的新列表。

伪代码示例(注意方括号):

List.of(1,2,3) == [1,2,3]
List.copyOf([1,2,3]) == [1,2,3]
List.of([1,2,3]) == [[1,2,3]]
List.of([1,2,3], [4,5,6]) == [[1,2,3], [4,5,6]]

第三行与您的代码中发生的情况类似。of创建一个以参数为元素的列表。你给的参数是什么?一组可修改。因此,它创建了一个带有单个元素的不可修改列表,该元素是您的可修改集合。另请注意,of不复制该集。

copyOf使用与您传入的集合相同的元素创建一个不可修改的列表。您传入col的元素为1, 2,因此它创建了一个不可修改List的元素为1, 2


以上是List.of和List.copyOf方法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>