初级程序员 - List.contains()的问题

    xiaoxiao2021-12-14  18

       判断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; }

    转载请注明原文地址: https://ju.6miu.com/read-964998.html

    最新回复(0)