Java:比较两个列表

时间:2011-05-04 05:01:13

标签: java arrays list arraylist

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

list1的值= [1,2,3]

list2的值= [2,3,4]

程序的输出应该说“1”缺失,“4”是一个新元素。我们该怎么做?

3 个答案:

答案 0 :(得分:6)

只需使用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);

答案 1 :(得分:0)

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

这应该有所帮助:

 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));

    } 

答案 2 :(得分:0)

  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));              
         }        
  }      

}