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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了List中remove()方法移除不了数据,达人快来~相关的知识,希望对你有一定的参考价值。

我有一部分代码,是从数据库里查出项目成员传给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中时,还会出现问题。
参考技术A 1、使用List的前提条件是:必须重写equals和hashcod方法,String等类都给你写好了 你可以不写;但是,你自己定义的类要重写;

2、当你用iterator遍历取直的时候,必须用iterator里的remove方法删除东西,而不是Collection里的remove方法,否则有可能出错,但不是一定出错。
参考技术B 看看你romveAll方法里面的条件

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

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

Java list.remove( )方法需要注意的地方

List<Integer> integerList = new ArrayList<>();

当我们要移除某个Item的时候

remove(int position):移除某个位置的Item

remove(object object):移除某个对象

 

那么remove(12)到底是移除第12的item,还是移除内容为12的Item。

那就要看12到底是int类型还是Integer类型,如果是int类型那么就是移除第12的item,如果是第Integer类型,那么就是移除内容为12的Item。

 


以上是关于List中remove()方法移除不了数据,达人快来~的主要内容,如果未能解决你的问题,请参考以下文章

关于map集合的remove方法,移除的同时获取数据

java 集合 Arraylist<Character> list怎么移除字符? list.remove('的')不管用

列表 List remove()方法

谈谈Python中pop与remove的用法

List<Integer> 去重remove()

List<Integer> 去重remove()