java - 如何定义我自己的元素类以用于 Set

标签 java set

我有以下代码:

public class MyElement {
    String name;
    String type;

    MyElement(String name, String type) {
        this.name = name;
        this.type = type;
    }
}

public class Test {

    public static void main(String[] args) {
        Set<MyElement> set = new HashSet<MyElement>();
        set.add(new MyElement("foo", "bar"));
        set.add(new MyElement("foo", "bar"));
        set.add(new MyElement("foo", "bar"));
        System.out.println(set.size());
        System.out.println(set.contains(new MyElement("foo", "bar")));
    }
}

执行后返回:

3

false

我本以为结果为 1 且为真。为什么我的元素没有被识别为相同,我该如何纠正? 谢谢, 韦恩。

最佳答案

您需要根据通用契约(Contract)在 MyElement 上实现 equals(Object o)hashCode()。缺少 Set.contains() 将使用比较对象内存地址的默认实现。由于您在 contains 调用中创建了 MyElement 的新实例,因此它返回为 false。

关于java - 如何定义我自己的元素类以用于 Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5279017/

相关文章:

java - 如何让我的 Jersey 2 端点在启动时急切地初始化?

java - Jersey 服务和持久层

ios - 如何在 Swift 中创建核心数据关系

c++ - 如何使用 unordered_set?

c# - 确定 .NET 中两个 IEnumerable<T> 集的相对补码

python - 对于相同的值仅迭代一次 for 循环

java - 无法让@Rollback 为我的 Spring JPA 集成测试工作

java - Java 类中的硬编码 Java 列表

java - 如何有效地获得一组的所有对?

java - 无法重命名或删除文件实例