比较两个集合是否相等

现在是情况是要比较一个List和Set是否相等,他们相等的条件就是里面所包含的元素是否相等以及长度一致就可以了,不需要比较顺序其他之类的情况。
比如List [a,v,3,5],Set[v,a,5,3]那么在我们的业务中是相等的,还有就是List[a,a,4,q] Set[4,a,q,a]也是相等的,但是java collection 里面没有api比较两个集合是否相等,所以就只有自己写。第一个想法就是将他们全部转为Arraylist然后比较,但是list的equals的方法不仅元素要相等,而且顺序也要一致,然后就想到了用HashSet,因为它是自己维护顺序的,但是问题也出现了,他不允许重复的值,所以比较的时候会出现问题,比如 List[a,a,a,4] Set[a,a,4],最后结果是相等,这当然让人无法接受。所以我自己写了一个equals方法。

 

  public static <T> boolean equals(Collection<T> a,Collection<T> b){
  if(a == null){
   return false;
  }
  if(b == null){
   return false;
  }
  if(a.isEmpty() && b.isEmpty()){
   return true;
  }
  if(a.size() != b.size()){
   return false;
  }
  List<T> alist = new ArrayList<T>(a);
  List<T> blist = new ArrayList<T>(b);
  Collections.sort(alist,new Comparator<T>() {
   public int compare(T o1, T o2) {
    return o1.hashCode() - o2.hashCode();
   }
   
  });
  
  Collections.sort(blist,new Comparator<T>() {
   public int compare(T o1, T o2) {
    return o1.hashCode() - o2.hashCode();
   }
   
  });
  
  return alist.equals(blist);
  
 }
 还是全部转为ArrayList,但是在比较之前先将他们排序,按照hashCode的大小排序,目前可以满足我们的业务需求,不知道有没有很好的算法,当然还是不要推荐其他开源的collection api啦,因为目前不会为了这个功能而引入另外其他的jar包,我自己也不想!
当然请各位大虾帮忙解决下。

转载于:https://www.cnblogs.com/daizhonghai1314/articles/2643847.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值