Java 可克隆和收集
我正在尝试编写我自己版本的ArrayList(以了解它是如何工作的),我正在查看由实现的接口(我希望保留与原始版本相同的契约) 我对clone()方法的定义有点困惑,希望有人能为我澄清一下 我不确定的是,如果有人在我的集合中使用clone()方法,它应该返回一个新的ArrayList(这意味着不是对现有ArrayList的引用)。 然而:Java 可克隆和收集,java,Java,我正在尝试编写我自己版本的ArrayList(以了解它是如何工作的),我正在查看由实现的接口(我希望保留与原始版本相同的契约) 我对clone()方法的定义有点困惑,希望有人能为我澄清一下 我不确定的是,如果有人在我的集合中使用clone()方法,它应该返回一个新的ArrayList(这意味着不是对现有ArrayList的引用)。 然而: 这是否意味着包含的每个对象也需要克隆 我是否必须为它们中的每一个显式地使用“new”创建一个新实例(这应该相当慢?) 我是否应该尝试在集合的对象上使用clon
提前感谢您的帮助。在收藏中,合同是使用相同的对象获取新收藏,而不是对象的副本或克隆。其他任何事情都会破坏合同 因此,您需要的是新集合中元素的“浅”副本,只是它们的引用。您对克隆/新建的建议是“深度复制”,这是非常不同的,在这种情况下您不应该这样做 所以
你提供的链接说它必须做一个字段对字段的复制。对我来说,这听起来像一个浅拷贝,而不是一个深(递归)拷贝?返回新的ArrayList().addAll(此);只要方法
addAll
返回newarraylist
,就可以了。但是,通常,addAll
返回一个布尔值。是的,明白了,就这样写吧,但明白了原理,谢谢!