比较两个列表并输出Java中缺少的和额外的元素

比较两个列表并输出Java中缺少的和额外的元素,java,list,performance,Java,List,Performance,我有两个字符串列表列表A和B。列表可能有相同的长度,或者一个比另一个长。每个列表中没有重复的值。它们由随机数组成 我想做的是找到A中缺少的元素和与列表B相比存在的额外元素,并将它们保存在两个新列表中,一个用于缺少的元素,另一个用于额外的元素 例如: A = ["3000047" , "3000042" , "3000030" , "30000475"] B = ["3000047" , "3000043" , "3000030" ] 输出应该是 Missing = ["3000043"]

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

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

例如:

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

B = ["3000047" , "3000043" , "3000030" ]
输出应该是

Missing = ["3000043"]

Extra = ["3000042" , "30000475"]
我想做的事情如下。但不确定性能和效率

  • 从A中读取元素
  • 检查B中是否存在元素
  • 如果没有,则将其添加到额外列表中
  • 如果是,则从A和B上拆下滤芯
  • 如果B为空,则在额外列表中添加所有重命名元素
  • 如果A为空,则在缺少的列表中添加所有重命名元素
  • 但不确定其性能和效率

    在性能方面,使用
    Set
    HashSet
    实现)而不是
    List
    。这将在以下情况下提供更好的
    O
    时间复杂度:

  • 检查B中是否存在元素
  • 此时将应用
    contains
    方法。查看答案以了解详细信息

    与列表的
    O(n)
    相比,
    HashSet的Contains
    O(1)
    ,因此如果您经常需要运行
    Contains
    ,就不应该使用列表


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

    但不确定其性能和效率

    在性能方面,使用
    Set
    HashSet
    实现)而不是
    List
    。这将在以下情况下提供更好的
    O
    时间复杂度:

  • 检查B中是否存在元素
  • 此时将应用
    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]