Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实现Evaluates在列表中包含的类_Java_List_Contain - Fatal编程技术网

Java 如何实现Evaluates在列表中包含的类

Java 如何实现Evaluates在列表中包含的类,java,list,contain,Java,List,Contain,我有: -覆盖hashCode()的MyClass -我将尽量避免使用列表的contains()方法将具有相同内容的MyClass的第二个实例添加到列表中 我怎样才能做到这一点?我认为这是通过重写hashCode()方法来实现的 我想代码比文字更能说明问题 public class TestClass { public static void main(String[] args){ MyClass myclass1 = new MyClass(2);

我有: -覆盖hashCode()的MyClass -我将尽量避免使用列表的contains()方法将具有相同内容的MyClass的第二个实例添加到列表中

我怎样才能做到这一点?我认为这是通过重写hashCode()方法来实现的

我想代码比文字更能说明问题

public class TestClass {

    public static void main(String[] args){

        MyClass myclass1 = new MyClass(2);
        MyClass myclass2 = new MyClass(2);

        List<MyClass> myclasses = new ArrayList<MyClass>();
        myclasses.add(myclass1);
        if(!myclasses.contains(myclass2)){
            myclasses.add(myclass2);
            System.out.println("I'll add ...");
        }

        System.out.println(myclasses.size());
    }
}

public class MyClass {

    int id = -1;
    String something = "";

    public MyClass(int idparam){
        this.id = idparam;
    }

    @Override
    public int hashCode() {
        return id;
    }

}

您必须重写equals和hashcode方法。该对象不包含在列表中,因为它不等于列表中的任何实例,即使它生成相同的哈希代码

@Override
public boolean equals(Object obj) {
    boolean eq = false;
    if (obj != null && obj instanceof YOURCLASS) {
        eq = this.getId().equals((YOUCLASS)obj.getId());
    }
}
Equals方法应该如下所示。YOURCLASS是添加到列表中的bean的名称。在验证obj实例不为null且与原始实例类型相同后,必须比较键字段


在您的示例中,您的类是MyClass,equals中的比较应该是with==而不是equals,因为您没有在字段中使用int而不是Integer。

您需要
equals()
。我也尝试过了。我刚刚更新了上面的代码。但它仍然不起作用。你能检查一下代码吗?(重写是不可能的,我只是添加了不带注释的equals@override)
equals
是用
Object
参数定义的。您当前正在重载该方法。确定。我懂了。谢谢。始终尝试使用类类型。谢谢。我该如何实施平等的方法?我更新了代码。你能复习一下吗,因为它仍然不起作用。
@Override
public boolean equals(Object obj) {
    boolean eq = false;
    if (obj != null && obj instanceof YOURCLASS) {
        eq = this.getId().equals((YOUCLASS)obj.getId());
    }
}