User user=userService.getEntity(id);//通过ID获得用户实体
List<User> userList=userService.getUserListByOrg(orgId);//通过组织ID获得用户列表
for(User u:userList)//删除前打印
log.info(u.getId());
userList.remove(user);//删除失败
for(User u:userList)//删除后打印
log.info(u.getId());
结果:
删除前打印 删除后打印
78 78
79 79
80 80
原因:看源码中,删除是通过使用equals比较对象,Object类中的equals方法定义为判断两个对象的地址是否相等,也就是说是否为同一个对象。显然我这里不是同一个对象,所以找不到对象删除失败。
public boolean remove(Object o) {
if(o == null) {
for(int index = 0; index < size; index++)
if(elementData[index] == null) {
fastRemove(index);
return true;
}
}else{
for(int index = 0; index < size; index++)
if(o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}
解决方法:
使用迭代器或者下标删除
Iterator<User> iterator = userList.iterator(); 除去自己
while (iterator.hasNext()) {
User u = iterator.next();
if (getCurrentUser().getId().equals(u.getId())) {
iterator.remove();//使用迭代器的删除方法删除
}
}