判断List中是否存在指定对象时,可用List<T>.contains()方法,但是在使用不同内存地址的对象时,判断错误的问题。
contains()方法内是使用equals方法。下面为源码:
public boolean contains(Object o) { return indexOf(o) >= 0; } public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null) return i; } else { for (int i = 0; i < size; i++) if (o.equals(elementData[i])) return i; } return -1; }
然而equals方法在比较对象时是在比较对象的内存地址,所以在下面的代码中会出现返回为false的情况
List<Model> modelList = ArrayList<Model>(); Model model1 = new Model(); Model model2 = new Model(); modelList.add(model1); modelList.add(model2); Model model3 = new Model(); if(modelList.contains(model3)){ ..... }
在这里model3的内容实际上是和model1的一样,但是 modelList.contains(model3)返回为false。
所以在这里我们需要重写Model中的equals方法
下面为通过对象中的某个值得判断:
public boolean equals(Object object) { if (object != null && object instanceof Model) { return this.getId() == ((Model) object).getId(); } return false; }
初级程序员 - List.contains()的问题
最新推荐文章于 2024-05-06 14:44:53 发布