在尝试克隆可变集合时,我最初的方法是在mutable.Cloneable特征上使用clone()方法。但是,这取决于创建引用副本的java.Object.clone实现,而不是深层副本。通过测试,我可以确认可变的。{Queue,Seq,Set}都是浅拷贝。
我求助于粗糙的新xxx(copy:_*)方法来创建一个深度副本,但是我的问题是,如果没有实现mutable.Cloneable特征,那么它的目的是什么?
发布于 2012-07-19 20:07:30
在许多集合类上实现了mutable.Cloneable特征。这里有几个例子:
https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/HashSet.scala#L82
只是clone没有定义为返回深度副本。这样做的原因是,通常你只是想复制一个可变的集合,这样你就可以在不改变原始集合的情况下以某种方式修改它--你可能希望保持它内部的实际元素不变。
如果你想要一个深度拷贝,你必须使用一个自定义的深度复制库,或者自己实现它。
https://stackoverflow.com/questions/11560506
复制相似问题