list.of和list.copyof方法

7xllpg7q  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(974)

我知道list.of和list.copyof会创建原始列表的不可变克隆列表,因此在我的理解中,下面的代码在实际打印1,2,[1,2]时应该打印[1],[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);
62lalag4

62lalag41#

两者都将创建不可修改的列表。但与 copyOf ,则对基础集合的后续更改将不会传播,即不会通过 list2 在这种情况下。
例如,如果您添加

col.add(3);

你会发现这种变化反映在 list1 ,但不是 list2 .
你可能也会发现这篇文章很有帮助:java如何正确使用list.copyof?
有关更多信息,请参阅此处的java文档:https://docs.oracle.com/javase/10/docs/api/java/util/list.html#unmodifiable
也:https://docs.oracle.com/javase/10/docs/api/java/util/list.html#copyof(java.util.collection)集合

x4shl7ld

x4shl7ld2#

当您执行list.of(col)时,实际上并不向其中添加元素,而是添加整个哈希集(作为引用),因此当您稍后向哈希集中添加一个项时,它将在稍后显示。

ne5o7dgx

ne5o7dgx3#

List.of 创建一个以参数为元素的新列表。 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 .

相关问题