复制

要创建与现有集合具有相同元素的集合,可以使用复制操作。标准库中的集合复制操作创建了具有相同元素引用的 复制集合。 因此,对集合元素所做的更改会反映在其所有副本中。
在特定时刻通过集合复制函数,例如toList()toMutableList()toSet() 等等。创建了集合的快照。 结果是创建了一个具有相同元素的新集合 如果在源集合中添加或删除元素,则不会影响副本。副本也可以独立于源集合进行更改。

  1. val sourceList = mutableListOf(1, 2, 3)
  2. val copyList = sourceList.toMutableList()
  3. val readOnlyCopyList = sourceList.toList()
  4. sourceList.add(4)
  5. println("Copy size: ${copyList.size}")
  6. //readOnlyCopyList.add(4) // 编译异常
  7. println("Read-only copy size: ${readOnlyCopyList.size}")

Target platform: JVMRunning on kotlin v. 1.3.72
这些函数还可用于将集合转换为其他类型,例如根据 List 构建 Set,反之亦然。

val sourceList = mutableListOf(1, 2, 3)    
val copySet = sourceList.toMutableSet()
copySet.add(3)
copySet.add(4)    
println(copySet)

Target platform: JVMRunning on kotlin v. 1.3.72
或者,可以创建对同一集合实例的新引用。使用现有集合初始化集合变量时,将创建新引用。 因此,当通过引用更改集合实例时,更改将反映在其所有引用中。

val sourceList = mutableListOf(1, 2, 3)
val referenceList = sourceList
referenceList.add(4)
println("Source size: ${sourceList.size}")

Target platform: JVMRunning on kotlin v. 1.3.72
集合的初始化可用于限制其可变性。例如,如果构建了一个 MutableListList 引用,当你试图通过此引用修改集合的时候,编译器会抛出错误。

val sourceList = mutableListOf(1, 2, 3)
val referenceList: List<Int> = sourceList
//referenceList.add(4)            // 编译错误
sourceList.add(4)
println(referenceList) // 显示 sourceList 当前状态

Target platform: JVMRunning on kotlin v. 1.3.72