remove(object o)方法删除的是 XXX.equals(XX)为true的元素(或者 .contains(Object o) 返回true的情况下删除成功)
在未重写equals方法的情况下,用默认的,默认的equals方法时比较两个对象的存储位置是否一致,以确定相等,这显然不符合业务需要。
我们需要重写,让其根据id等少数几个字段判断(有些方法会自动调用equals,然后根据equals返回的结果再执行相应的操作,比如list的removeAll,为了符合业务需要需要重写)
Teacher t1 = new Teacher("lisa");
Teacher t2 = new Teacher("lili");
Teacher t3 = new Teacher("an");
List<Teacher> list = new ArrayList<>();
list.add(t1);
list.add(t2);
list.add(t3);
System.out.println(list);
list.remove(t1);
System.out.println(list);
list.remove(new Teacher("an")); //执行结果:没有删除"an"
System.out.println(list);
想要删除“an”,重写equals方法就可以。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Teacher teacher = (Teacher) o;
return Objects.equals(name, teacher.name);
}