【问题标题】:Compare two arraylist and remove common elements比较两个arraylist并删除公共元素
【发布时间】:2018-03-30 16:05:24
【问题描述】:

我知道这个问题已经被问过很多次了。但在我的问题中,有两个相同对象类型的数组列表。假设 arraylist A 包含 5 个元素,arraylist B 包含 2 个元素。

Arraylist A elements = obj1,obj2,obj3,obj4,obj5

Arraylist B elements = obj1,obj2

我想要的是删除 Arraylist B 中存在的 Arraylist A 的所有元素,即 obj1、obj2。那么最终的 Arraylist A 应该是这样的:

Arraylist A = obj3,obj4,obj5

我实现的代码:

for (int i=0;i<arraylistB.size();i++){
    if(arraylistA.contains(arraylistB.get(i))){
        arraylistA.remove(arraylistB.get(i));
        arraylistB.remove(i);
   }
}

但是这段代码没有从Arraylist A 中删除任何内容,我不知道我做错了什么。请帮帮我!

【问题讨论】:

  • 你试过removeAll 吗?
  • 是的,没有成功
  • 元素的类型是什么?它是自定义类型吗?如果是这样,您是否覆盖了 equals() 和 hashCode()?
  • 不方便,因为我正在使用我的手机。有人会在几分钟内找到重复的链接。

标签: java android arraylist


【解决方案1】:

您需要覆盖 Object1、Object2 等类的 equals()hashcode(),它们应该是同一类的实例。

然后你可以做一个removeAll()

【讨论】:

    【解决方案2】:

    猜测arraylistA和arraylistB中的元素不一样,意思是引用的不是同一个地址,所以这个检查不正确

    if(arraylistA.contains(arraylistB.get(i)))
    

    应该通过例如检查id 的元素。

    【讨论】:

    • 两个数组列表具有相同的对象类型
    • 不,它没有
    • 表示arraylistA中的obj1arraylistB中的obj1是不同的。您可以通过调试检查两个对象地址来查看它。
    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多