比较两个列表并输出Java中缺少的和额外的元素
我有两个字符串列表列表A和B。列表可能有相同的长度,或者一个比另一个长。每个列表中没有重复的值。它们由随机数组成 我想做的是找到A中缺少的元素和与列表B相比存在的额外元素,并将它们保存在两个新列表中,一个用于缺少的元素,另一个用于额外的元素 例如:比较两个列表并输出Java中缺少的和额外的元素,java,list,performance,Java,List,Performance,我有两个字符串列表列表A和B。列表可能有相同的长度,或者一个比另一个长。每个列表中没有重复的值。它们由随机数组成 我想做的是找到A中缺少的元素和与列表B相比存在的额外元素,并将它们保存在两个新列表中,一个用于缺少的元素,另一个用于额外的元素 例如: A = ["3000047" , "3000042" , "3000030" , "30000475"] B = ["3000047" , "3000043" , "3000030" ] 输出应该是 Missing = ["3000043"]
A = ["3000047" , "3000042" , "3000030" , "30000475"]
B = ["3000047" , "3000043" , "3000030" ]
输出应该是
Missing = ["3000043"]
Extra = ["3000042" , "30000475"]
我想做的事情如下。但不确定性能和效率
Set
(HashSet
实现)而不是List
。这将在以下情况下提供更好的O
时间复杂度:
contains
方法。查看答案以了解详细信息
与列表的O(n)
相比,HashSet的Contains
是O(1)
,因此如果您经常需要运行Contains
,就不应该使用列表
您提出的算法可以使用Java内置函数实现 但不确定其性能和效率 在性能方面,使用
Set
(HashSet
实现)而不是List
。这将在以下情况下提供更好的O
时间复杂度:
contains
方法。查看答案以了解详细信息
与列表的O(n)
相比,HashSet的Contains
是O(1)
,因此如果您经常需要运行Contains
,就不应该使用列表
您提出的算法可以使用Java内置函数实现
Set<String> A = new HashSet<>(Arrays.asList("3000047", "3000042", "3000030", "30000475"));
Set<String> B = new HashSet<>(Arrays.asList("3000047", "3000043", "3000030"));
Set<String> copyA = new HashSet<>(A);
Set<String> copyB = new HashSet<>(B);
copyB.removeAll(A);
System.out.println("Missing: " + copyB);
copyA.removeAll(B);
System.out.println("Extra: " + copyA);
Missing: [3000043]
Extra: [3000042, 30000475]