首页 > 解决方案 > 列表.contains(MyModel) java 不工作

问题描述

我有我的 MyModel 类,其中包含:

private int value;

public int getValue() {
    return value;
}

public void setValue(int value) {
    this.value = value;
}

现在我已经填充了 MyModel 类:

private final List<MyModel> listModel = new ArrayList<>();
private Mymodel myModel;

 myModel= new MyModel ();
 myModel.setValue(1);
 myModel.setValue(2);
 myModel.setValue(3);
 listModel.add(myModel);

我想知道 listModel 是否包含 myModel

listModel.contains(myModel)

我进行了一些搜索,我知道 contains 使用了等号,但我正在寻找找到解决方案的正确方法。提前致谢

标签: javaarraylistcontains

解决方案


如果您查看类中的实现containsArrayList您会发现它在内部使用该equals方法来查找对象:

public boolean contains(Object o) {
    return indexOf(o) >= 0;
}

public int indexOf(Object o) {
    return indexOfRange(o, 0, size);
}

int indexOfRange(Object o, int start, int end) {
    Object[] es = elementData;
    if (o == null) {
       ...
    } else {
        for (int i = start; i < end; i++) {
            if (o.equals(es[i])) { //calling overridden equals of the object instance, else it will revert to the Object's equals which simply compares the reference 
                return i;
            }
        }
    }
    return -1;
}

所以你需要为你的班级创建equals和创建。您可以借助正在使用的 IDE 为您生成它:hashCodeMyModel

举个例子:

class MyModel{
    private int value;

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof MyModel)) return false;
        MyModel myModel = (MyModel) o;
        return value == myModel.value;
    }

    @Override
    public int hashCode() {
        return Objects.hash(value);
    }
}

推荐阅读