假设我有一个点的arrayList1。数据结构是这样的:(1,2)->(2,2)->(3,2)->(4,2)->(5,2)
我有另一个要点的arrayList2:(2,2)->(1,2)->(8,5)->(9,3)
如何比较两个列表并将不存在的值从arrayList2添加到arrayList1?
当前解决方案
我现在能想到的唯一方法是使用for循环比较arrayList1中的每个点,例如if(!arrayList1.contains(arrayList2.get(i))){ arrayList1.add(arrayList2.get(i)); } i++;
。
是否有更有效的方法或已经从类准备好的方法?因为我有arrayList1直到arrayList6进行比较和替换...。
最佳答案
List<Point> list3 = new ArrayList<Point>(new HashSet<Point>(list1){{ addAll(list2); }});
Set<String> tmpSet = new HashSet<String>(arrayList1);
tmpSet.addAll(arrayList2);
List<String> mergedList = new ArrayList<String>(tmpSet);
*正如布鲁斯·韦恩(Bruce Wayne)正确指出的那样,由于下面的文章中描述了潜在的缺点,因此应谨慎使用Double Brace initialization(单行示例,在两个示例中也用于填充前两个列表):
Don’t be “Clever”: The Double Curly Braces Anti Pattern
说明:
Set
不能包含重复项,因此请使用一个作为过渡向量。示例1的代码:
List<String> arrayList1 = new ArrayList<String>(){{ add("One"); add("Two"); }};
List<String> arrayList2 = new ArrayList<String>(){{ add("Two"); add("Three"); }};
List<String> mergedList = new ArrayList<String>(new HashSet<String>(arrayList1){{ addAll(arrayList2); }});
System.out.println(mergedList);
输出:[1、2、3]
示例2的代码:
List<String> arrayList1 = new ArrayList<String>(){{ add("One"); add("Two"); }};
List<String> arrayList2 = new ArrayList<String>(){{ add("Two"); add("Three"); }};
Set<String> tmpSet = new HashSet<String>(arrayList1);
tmpSet.addAll(arrayList2);
List<String> mergedList = new ArrayList<String>(tmpSet);
System.out.println(mergedList);
输出:[1、2、3]