【问题标题】:Java :Comparing two listsJava:比较两个列表
【发布时间】:2026-01-30 02:30:01
【问题描述】:

我在 java 中有两个列表(ArrayList)。

list1 = [1,2,3]的值

list2 = [2,3,4] 的值

程序的输出应该说 '1' is missing and '4' is a new element 。我们该怎么做呢?

【问题讨论】:

  • 如果您的数组已知是已排序的,您可以执行单次通过解决方案...因此,如果您正在寻找比复制到 Set 中更快/更有效的方法,请提供更多详细信息。跨度>

标签: java arrays list arraylist


【解决方案1】:

只需使用 Sets 和 removeAll 方法,

Set missing = new HashSet(list1);
missing.removeAll(list2);
System.out.println("missing:" + missing);

Set extra = new HashSet(list2);
extra.removeAll(list1);
System.out.println("extra:" + extra);

【讨论】:

  • 类似,但 removeAll() 返回一个布尔值而不是另一个 Set,并且您的括号不匹配
【解决方案2】:

我相信我们可以选择第一个元素并遍历第二个列表并检查该元素是否可用,如果它在第二个列表中,则跳过并选择第一个列表的下一个元素。并重复额外的元素逻辑。只是我担心复杂性! 如果我们想使用集合,那么它可能会更容易。但我认为使用平面数组可能会更好!

这应该会有所帮助:

 for (int i = 0; i < list1.size(); i++) {
      if (list2.contains(list1.get(i))) 
     return;
      else
    S.o.p("missing:"+list1.get(i));
      }
 for (int j=0; j<list2.size();j++){
      if (list1.contains(list2.get(j))) 
     return;
      else
    S.o.p("new element:"+list1.get(j));

    } 

【讨论】:

  • 为什么是return?您需要继续循环,直到用完列表。另外,这是一个 O(n^2) 算法,这对于小列表很好,但如果列表很大,很快就会耗尽你的耐心。
【解决方案3】:
  import java.util.*;      

  class Demo{      
     public static void main(String ...args){      
         List list1 = new ArrayList();       
         List list2 = new ArrayList();      

         list1.add(new Integer("1"));     
         list1.add(new Integer("2"));      
         list1.add(new Integer("3"));           

         list2.add(new Integer("2"));      
         list2.add(new Integer("3"));     
         list2.add(new Integer("4"));     

         for(int i = 0; i < list1.size(); i++) {      
            if (list2.contains(list1.get(i)))                      
                continue;      
            else     System.out.println("missing:"+list1.get(i));       
         }     
         for(int j=0; j<list2.size();j++){     
            if (list1.contains(list2.get(j)))                  
                 continue;     
            else     System.out.println("new element:"+list2.get(j));              
         }        
  }      

}

【讨论】: