查找列表之间是否相等的项目

时间:2018-09-02 20:58:17

标签: java arraylist

我的项目中有2个ArrayList。我想得到不相等的物品。

例如:

列表1-列表2

AB ------- AB

BA ------- BA

CC

我想得到这个CC。我是这样的:

ArrayList<String> alllist= new ArrayList<>(ArrayList<String> 1);
for (String i : ArrayList<String> 1) {
                for (String j :  ArrayList<String> 2) {
                    if (i.equals(j)) {
                        alllist.remove(i);
                        break;
                    }
                }
            }

如果我在ArrayList中有3或4个项目,则可以使用此方法,但是当我添加200个项目时,此方法将无法正常工作并得到错误的列表。

有什么主意吗?我还能做些什么?

非常感谢。

3 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,那么您正在寻找symmetric difference。您可以使用Apache Commons Collections中的CollectionUtils.disjunction

给出:

List<String> list1 = Arrays.asList("AB", "BA", "DD");
List<String> list2 = Arrays.asList("AB", "BA", "CC");

操作:

System.out.println(CollectionUtils.disjunction(list1, list2));

结果:

[DD, CC]

答案 1 :(得分:1)

如果您需要列表1中的所有内容,但不需要列表2

1)遍历第一个列表,并将每个元素添加到HashSet中。

2)使用set.removeAll(list2)删除列表2中的所有内容。

其余的是list1而不是list2。

如果您需要将所有内容都放在另一个列表中而不是另一个列表中,则可以反向重复。这应该将操作反转为O(n + m),其中n是列表1的长度,m是列表2的长度。您的伪代码是O(n * m)。

HashSet firstButNotSecond = new HashSet(list1);
firstButNotSecond.removeAll(list2);
HashSet secondButNotFirst = new HashSet(list2);
secondButNotFirst.removeAll(list1);

答案 2 :(得分:0)

ArrayList<String> list2 = new ArrayList(); 
list2.add("AB");
list2.add("BA");
ArrayList<String> list1 = new ArrayList();
list1.add("AB");
list1.add("BA");
list1.add("C");
//remove all the element from the list1 which are also in list2 
list1.removeAll(list2);
System.out.println("Result: " + list1); //only C will left behind