java - 列表.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 使用了等号,但我正在寻找找到解决方案的正确方法。提前致谢
解决方案
如果您查看类中的实现contains
,ArrayList
您会发现它在内部使用该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 为您生成它:hashCode
MyModel
举个例子:
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);
}
}
推荐阅读
- javascript - 输入自由文本输入 HTML 时的内联下拉列表选择
- python - 客户用户模型错误;ModuleNotFoundError:没有名为“帐户”的模块
- r - 如何禁用 R Datatable 中特定列的双击反应性
- python - time.time() 浮动对象没有属性错误
- regex - Ansible 从文件中复制 ssh 公钥,在 uri 调用中使用
- python - 熊猫,扩展数据框系列
- .net - 我们可以将 WEBSITE_LOAD_USER_PROFILE=1 添加到 web.config
- azure-devops - Azure DevOps:将团队成员添加到新团队/区域
- python - 错误 NOT NULL 约束失败:使用 3 个模型(外键)自定义表单 django-all-auth
- c - gcc-10.0.1 特定的段错误