java - HashSet clone() 方法
问题描述
我使用 clone() 创建了现有 HashSet 的克隆,然后比较它们的引用,如下所示:
HashSet<Employee> h = new HashSet<>();
HashSet<Employee> h1=(HashSet<Employee>) h.clone();
System.out.println(h==h1);
输出:
false
这不应该是真的,因为我们正在创建浅拷贝吗?
解决方案
在 java == for objects 中,检查对象是否完全相同。
如果你去检查克隆方法:
public Object clone() {
try {
HashSet<E> newSet = (HashSet<E>) super.clone();
newSet.map = (HashMap<E, Object>) map.clone();
return newSet;
} catch (CloneNotSupportedException e) {
throw new InternalError(e);
}
}
很容易看出它正在创建一个新对象。所以现在你有两个不同的对象,它们是浅相等的
推荐阅读
- c# - 在电子表格单元格上写入文本
- python - python中多元核密度估计的条件抽样
- reactjs - 使用 VS 和 Chrome 的突破性 Sagas、Redux 和 Co.
- reporting-services - 当我在参数中选择年份时,如何获得一年中的第一天
- asp.net-core - 向 ASP.NET Core 3.0 添加会话存储
- api - 如何在 Azure DevOps 中通过 API 向现有工作项卡(功能卡)添加讨论评论
- javascript - 通过唯一字段合并 JSON 对象,然后打印子节点数据
- javascript - 如果用户未从下拉列表中选择,则发出警报
- anaconda - Anaconda 使用 ZSH 终端安装失败
- javascript - django/nuxt 应用程序在刷新后保持登录状态