为了制作一个对象的副本并访问其数据,有什么更好的,为什么?
1。创建一个新对象并使用您想要的数据对其进行初始化 通过构造函数克隆
HashSet<String> myClone = new HashSet<String>(data);
2。按原样克隆对象并将其强制转换为您认为的类型
HashSet<String> myClone = (HashSet<String>) data.clone();
答案 0 :(得分:2)
绝对使用复制构造函数 - clone()
确实非常破碎(至少大多数人同意这一点。)有关详细信息,请参阅here。
答案 1 :(得分:1)
'这取决于'。并非所有类都具有复制构造函数。某些类定义clone()
,其他类从Object
继承。
如果您正在考虑如何在自己的类中实现复制语义,很多人建议不要克隆,但其他人建议使用它。第三种选择是执行工作的静态工厂方法。
如果您正在尝试复制某些现有类,那么您将受到现有实现的支配。也许它有clone()
可以做你想要的,也许它没有。也许它有一个复制构造函数,也许它没有。
答案 2 :(得分:0)
克隆不复制数据,它复制引用(Shallow copy)。所以,如果你想做一个深层的“复制”并且它与第一个独立,你将不得不做一个“逐项克隆”,通常称为deep copy(有几种方法可以完成这个)。
此外,您可以查看实现该HashSet的类的clone()
方法。如果该类已覆盖该方法,则它可能会执行深层复制。我推荐你这本书:http://www.horstmann.com/corejava.html