首页 > 解决方案 > HashSet clone() 方法

问题描述

我使用 clone() 创建了现有 HashSet 的克隆,然后比较它们的引用,如下所示:

HashSet<Employee> h = new HashSet<>();
HashSet<Employee> h1=(HashSet<Employee>) h.clone();
System.out.println(h==h1);

输出:

false

这不应该是真的,因为我们正在创建浅拷贝吗?

标签: javacollectionsclone

解决方案


在 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);
    }
}

很容易看出它正在创建一个新对象。所以现在你有两个不同的对象,它们是浅相等的


推荐阅读