加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为自定义对象列表实现removeAll的问题

发布时间:2020-05-25 15:04:59 所属栏目:Java 来源:互联网
导读:我的代码中有一个场景,我需要比较两个列表并从第一个列表中删除第二个列表中的对象.类似于“removeAll”对象如何为List工作.由于我的List是在自定义对象上创建的,因此removeAll方法对我不起作用. 我尝试过各种方法来完成这项工作: – 为包含列表的自定义对象

我的代码中有一个场景,我需要比较两个列表并从第一个列表中删除第二个列表中的对象.类似于“removeAll”对象如何为List工作.由于我的List是在自定义对象上创建的,因此removeAll方法对我不起作用.

我尝试过各种方法来完成这项工作:
– 为包含列表的自定义对象实现了equals()和hashCode
– 为自定义对象实现了Comparable Interface
– 为自定义对象实现了比较器接口

我甚至尝试过使用Apache Common的CollectionUtils和ListUtils方法(减去,交叉,删除所有).似乎没有工作.

我知道我可能需要编写一些自定义删除代码.但不知道如何去做.任何帮助我朝正确方向前进的指示都将非常感激.

谢谢,
松鸦

解决方法

Java Collections已经适合您的场景.调用 Collection.removeAll(Collection),它将使用equals()方法从传入集合中删除所有项目以测试相等性.
List<String> list1 = new ArrayList<String>();
Collections.addAll(list1,"one","two","three","four");
List<String> list2 = new ArrayList<String>();
Collections.addAll(list2,"four","five");
list1.removeAll(list2); // now contains "one","two"

为了使这个工作你正在存储的对象只需要正确实现equals / hashCode契约,即:给定任意两个对象a和b:

a.equals(b) == b.equals(a)

和:

a.hashCode() == b.hashCode() if a.equals(b)

定义不正确的equals和hashCode方法会产生未定义的行为,并且是集合相关问题的常见原因.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读