2

在尝试克隆可变集合时,我最初的方法是在 mutable.Cloneable 特征上使用 clone() 方法。但是,这取决于创建引用副本而不是深层副本的 java.Object.clone 实现。通过测试,我可以确认 mutable.{Queue,Seq,Set} 都是浅拷贝。

我采用了粗略的新 xxx(copy:_*) 方法来创建深层副本,但我的问题是 mutable.Cloneable 特征如果没有实现的目的是什么?

4

1 回答 1

5

mutable.Cloneable特征已在许多集合类上实现。这里有一些例子:

https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/ArrayBuffer.scala#L176

https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/HashSet.scala#L82

https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/WrappedArray.scala#L78

只是clone没有定义为返回深层副本。这样做的原因是您通常只想复制一个可变集合,以便您可以在不更改原始集合的情况下以某种方式修改它 - 保存在其中的实际元素可能希望保持不变。

如果你想要一个深拷贝,你必须要么使用自定义的深拷贝库,要么自己实现它。

于 2012-07-19T12:07:29.873 回答