List中remove()方法移除不了数据,达人快来~

来源:百度知道 编辑:UC知道 时间:2024/09/27 09:28:03
我有一部分代码,是从数据库里查出项目成员传给List<User> a,
也是从数库取出全部员工List<User> b, 现在想从List<User> b中用romveAll方法把含有的a 全部移除---成功,然后还想从b 中remove() 项目经理(也是一user)---失败,不晓得为什么,只是debug时发现其他的数据类型都显示User ,而不能删除的项目经理,类型为 User_#javasist_2,反正就是跟着一些字符,这种类型为什么和正常的User不一样,怎么导致的,为什么删不了,跟hibernate有关吗?高手啊~快帮我啊~如果特满意另加分
先谢谢各位~我写了equals方法了,问题就出在,为什么查出所有User时,debug发现其它的员工类型都是User类型,能remove掉,而项目经理那个员工的类型就是User_$$_javassist_3这类型的,remove失败。而且这些数据都是我用hibernate一条hql语句查出来的,很简单的select语句。经理和普通员工都是在User表里,不同的就是,与别的表的关联关系。这能不能是用hibernate的原因?

类User重载方法equals.

public boolean equals(Object object){
if(object instanceof User){
User user = (User)object;
// 我这里是用id来比较,如果User没有id属性,也有用账号、身份证号等属性来比较。
return user.getId().equalsIgnoreCase(this.id);
}else{
return false;
}
}

从List中删除某个对象,是要调用对象的equals方法,和List中的对象相比较,相等才删除。如果不重装equals方法,那么调用的就是父类Object的equals方法,这样是用 == 相判断相等的。只有两个变量指向的是同一个对象,== 判断才会相会。
String s1 = new String("a");
String s2 = new String("a");

s1 == s2 为false.
s1.equals(s2) 为 true.

如果是这样,建议你重载hashCode方法。否则,当你用User对象作为Key放到HashMap中时,还会出现问题。

1、使用List的前提条件是:必须重写equals和hashcod方法,String等类都给你写好了 你可以不写;但是,你自己定义的类要重写;

2、当你用iterator遍历取直的时候,必须用iterator里的remove方法删除东西,而不是Collection里的remove方法,否则有可能出错,但不是一定出错。

看看你romveAll方法里面的条件

如果是if(项目经理.equals(b.getint(i)))
b.romve(i)
的话就可能出错

建议改成if(项目经理.getID().equals(b.getInt(i).getID()))