两个集合如何比较

 List<String> list1 = new ArrayList<String>(); 
           List<String> list2 = new ArrayList<String>(); 
           list1.add("111"); 
           list1.add("222"); 
           list1.add("222") 
           list1.add("333"); 
           list2.add("444"); 
           list2.add("222"); 
           list2.add("222"); 
           list2.add("555"); 

Collection ret = CollectionUtils.intersection(list1, list2); 
Collection union = CollectionUtils.union( a, b );  //并集  
Collection intersection = CollectionUtils.intersection( a, b ); //交集  
Collection disjunction = CollectionUtils.disjunction( a, b ); //析取  
Collection subtract = CollectionUtils.subtract( a, b ); //差集 

CollectionUtils--->org.apache.commons.collections.CollectionUtils 
原理上是通过将两个collection转换成mapa和mapb,然后两个map再合并到一个set 
中,利用set的自身唯一性,然后遍历这个set,看每个set项在两个map中是否存在 
找到了则放入返回集合中,关键这个的强大之处是还能返回相同的两个222, 
效率应该还可以. 

import java.util.HashSet; 
import java.util.Set; 

public class FindDups { 
public static void main(String[] args){ 
     Set set1 = new HashSet(); 
     Set set2 = new HashSet(); 

     //set1 
     set1.add("name"); 
     set1.add("sex"); 
     set1.add("height"); 
     set1.add("weight"); 
     set1.add("size"); 

     //set2 
     set2.add("name"); 
     set2.add("sex"); 
     set2.add("age"); 

     Set sym = new HashSet(set1); 
     Set tmp = new HashSet(set1); 

     sym.retainAll(set2); 
     tmp.removeAll(set2); 
     set2.removeAll(set1); 

     System.out.println("set1&set2:"+sym.size()); 
     System.out.println("set1&set2:"+sym);   //set1和set2交集 

      System.out.println("set1-set2"+"新增数量:"+tmp.size()); 
     System.out.println("set1-set2:"+tmp);    //set1和set2差集 

      System.out.println("set2-set1"+"剔除数量:"+set2.size()); 
     System.out.println("set2-set1:"+set2); //set2和set1差集 
     
     }   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值