繁体   English   中英

如何定义我自己的元素类以与Set一起使用

[英]How do define my own element class for use with 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而且是真的。 为什么我的元素不被认为是相同的,我该如何纠正? 谢谢,韦恩。

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

你应该覆盖一个equals(MyElement me)函数。 Equals返回一个布尔值

否则,您正在检查两个项目是否是对象的相同实例,而不是它们的内部内容是相同的。

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

public boolean Equals<MyElement>(MyElement me) {
    return this.name.equals(me.name) && this.type.equals(me.type);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM