rav*_*rav 4 java performance list
我有两个字符串列表列表 A 和 B。列表可能具有相同的长度,或者可能一个比另一个长。每个列表中没有重复的值。它们由随机数组成。
我想要做的是找到 A 中与列表 B 相比缺失和多余的元素。并将它们保存在两个新列表中,一个用于缺失元素,一个用于额外元素。
例如 :
A = ["3000047" , "3000042" , "3000030" , "30000475"]
B = ["3000047" , "3000043" , "3000030" ]
Run Code Online (Sandbox Code Playgroud)
输出应该是
Missing = ["3000043"]
Extra = ["3000042" , "30000475"]
Run Code Online (Sandbox Code Playgroud)
我想这样做如下。但不确定性能和效率。
但不确定性能和效率
性能方面,使用Set( HashSetimplementation) 而不是List. 这将在以下位置提供更好的O时间复杂度:
- 检查B中是否存在元素。
这是你应用contains方法的时候。检查此答案以获取详细信息。
包含 a与列表
HashSet进行O(1)比较O(n),因此如果您经常需要运行 ,则永远不要使用列表contains。
您提出的算法可以使用 Java 内置函数来实现。
Set#removeAllSet<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);
Run Code Online (Sandbox Code Playgroud)
输出
Missing: [3000043]
Extra: [3000042, 30000475]
Run Code Online (Sandbox Code Playgroud)