如何从两个数组列表中删除常用值

我们如何从两个ArrayList中删除常用值。 让我们考虑我有两个Arraylist,如下所示

ArrayList1= [1,2,3,4] ArrayList1= [2,3,4,6,7] 

我希望得到结果

 ArrayListFinal= [1,6,7] 

有人可以帮帮我吗?

以下是完成任务后可以遵循的算法:

  • 构造两个数组的并集
  • 构造两个数组的交集
  • 从联合中减去交集以获得结果

Java集合支持addAllremoveAllretainAll 。 使用addAll构造联合,使用retainAll构造交集,并使用removeAll进行减法, 如下所示 :

 // Make the two lists List list1 = Arrays.asList(1, 2, 3, 4); List list2 = Arrays.asList(2, 3, 4, 6, 7); // Prepare a union List union = new ArrayList(list1); union.addAll(list2); // Prepare an intersection List intersection = new ArrayList(list1); intersection.retainAll(list2); // Subtract the intersection from the union union.removeAll(intersection); // Print the result for (Integer n : union) { System.out.println(n); } 

你实际上是在寻求对称差异 。

 List aList = new ArrayList<>(Arrays.asList(1, 2, 3, 4)); List bList = new ArrayList<>(Arrays.asList(2, 3, 4, 6, 7)); // Union is all from both lists. List union = new ArrayList(aList); union.addAll(bList); // Intersection is only those in both. List intersection = new ArrayList(aList); intersection.retainAll(bList); // Symmetric difference is all except those in both. List symmetricDifference = new ArrayList(union); symmetricDifference.removeAll(intersection); System.out.println("aList: " + aList); System.out.println("bList: " + bList); System.out.println("union: " + union); System.out.println("intersection: " + intersection); System.out.println("**symmetricDifference: " + symmetricDifference+"**"); 

打印:

 aList: [1, 2, 3, 4] bList: [2, 3, 4, 6, 7] union: [1, 2, 3, 4, 2, 3, 4, 6, 7] intersection: [2, 3, 4] **symmetricDifference: [1, 6, 7]** 

你可以使用这样的东西:

  ArrayList  first = new ArrayList  (); ArrayList  second = new ArrayList  (); ArrayList  finalResult = new ArrayList  (); first.add(1); first.add(2); first.add(3); first.add(4); second.add(2); second.add(3); second.add(4); second.add(6); second.add(7); for (int i = 0; i < first.size(); i++){ if (!second.contains(first.get(i))){ finalResult.add(first.get(i)); } } for (int j = 0; j < second.size(); j++){ if (!first.contains(second.get(j))){ finalResult.add(second.get(j)); } } 

我刚刚在你的post中描述了两个ArrayLists,我检查了它们的不同元素; 如果找到了这样的元素,我将它们添加到finalResult ArrayList中。

我希望它会帮助你:)

 SetList A = new SetList(); A.addAll({1,2,3,4}); SetList B = new SetList(); B.addAll({2,3,4,6,7}); Integer a = null; for (int i=0; i final = new SetList(); final.addAll(A); final.addAll(B); // final = { 1, 6, 7 }