【问题标题】:Compare two list and output missing and extra element in Java比较两个列表并输出Java中的缺失和额外元素
【发布时间】:2020-04-09 08:18:43
【问题描述】:

我有两个字符串列表 A 和 B。列表的长度可能相同,或者一个比另一个长。每个列表中没有重复值。它们由随机数组成。

我要做的是找到与列表 B 相比 A 中存在的缺失和额外元素。并将它们保存在两个新列表中,一个用于缺失元素,一个用于额外元素。

例如:

A = ["3000047" , "3000042" , "3000030"  , "30000475"]

B = ["3000047" , "3000043" , "3000030" ]

输出应该是

Missing = ["3000043"]

Extra = ["3000042" , "30000475"]

我想在下面做。但不确定性能及其效率。

  1. 从 A 中读取元素。
  2. 检查 B 中是否存在元素。
  3. 如果没有,请将其添加到额外列表中。
  4. 如果是,则从 A 和 B 中删除该元素。
  5. 如果 B 为空,则在 Extra 列表中添加所有重命名元素。
  6. 如果 A 为空,则在缺失列表中添加所有重命名元素。

【问题讨论】:

    标签: java list performance


    【解决方案1】:

    但不确定性能和效率

    性能方面,使用SetHashSet 实现)而不是List。这将提供更好的O 时间复杂度:

    1. 检查 B 中是否存在元素。

    此时您将应用contains 方法。有关详细信息,请查看this 答案。

    包含HashSetO(1)O(n) 的列表相比,因此如果您经常需要运行contains,则不应使用列表。


    您提出的算法可以使用 Java 内置函数来实现。

    Set#removeAll

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 2015-10-18
      • 2019-12-07
      • 1970-01-01
      • 2020-07-04
      相关资源
      最近更新 更多