1

我正在尝试编写我自己的 ArrayList 版本(以了解它是如何工作的)并且我正在查看由java.lang.ArrayList实现的Cloneable接口(我希望保持与原始版本相同的合同)。

我对 clone() 方法的定义有点困惑,希望有人能为我的情况澄清一下。

我不太确定的部分是,如果有人在我的集合上使用 clone() 方法,它应该返回一个新的 ArrayList (意味着不是对现有的引用)。然而:

  1. 这是否意味着包含的每个对象也需要克隆?
  2. 我是否必须为每个实例使用“new”显式创建一个新实例(这应该很慢?)
  3. 我是否应该尝试在我的集合对象上使用 clone() 方法,以及如何确保它们覆盖 clone() 方法,因为 Cloneable 中的定义表明它不是明确需要的(该方法不在接口中)?

提前感谢您的帮助。

4

1 回答 1

3

在 Collection 的上下文中,合同是获取具有相同对象的新 Collection,而不是对象的副本或克隆。其他任何事情都会破坏合同。

所以你想要的是新集合中元素的“浅”副本,只是它们的引用。您对克隆/新建的建议是“深拷贝”,这是非常不同的,在这种情况下您不应该这样做。

所以

  1. 您绝对不应该克隆集合中的每个对象。
  2. 与 1 相同。您不应该使用 new,这将是对集合进行“深度”复制。
  3. 不,同 1. 2.
于 2013-06-05T01:33:59.170 回答