怎样比较两个集合是否相等

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/boonyaAlishing/article/details/84431544
受这篇文章启发:[url]http://rijin.iteye.com/blog/1868186[/url]

[color=brown]如果两个对象相同,那么它们的hashCode值一定相同;如果两个对象的hashCode相同,它们并不一定相同[/color]

不知道大家怎么实现,下面是我的代码:

package com.boonya;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;

public class CollectionCompare {

/**
* 判断两个集合是否相等(彼此包含): 允许重复元素有序的List、ArrayList, 不允许元素重复无序的Set
*
* @param ca
* @param cb
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public boolean isContainEachother(Collection ca, Collection cb) {
if (ca != null && cb != null) {
if (ca.size() == cb.size()) {
Set setA = (Set) ca, setB = (Set) cb; // 去重复元素
if (setA.size() == setB.size()) {
return setA.containsAll(setB);
// return setB.containsAll(setA); //setA与setB是包含关系
// 证明两个set是相等的
} else {
return false;
}
} else {
return false;
}
}else if(ca==null&&cb==null){
return true;
}
return false;
}

/**
* 通过HashCode比较两个集合是否相等
*
* @param ca
* @param cb
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public boolean isEqualComparedByHashcode(Collection ca, Collection cb) {
if (ca != null && cb != null) {
if (ca.size() == cb.size()) {
Set setA = (Set) ca, setB = (Set) cb; // 去重复元素
if (setA.size() == setB.size()) {
int flag = 0; // 标记次数
List listA = (List) setA, listB = (List) setB; // 转成有序集合
Collections.sort(listA); // 为集合listA排序
Collections.sort(listB); // 为集合listB排序
for (int i = 0; i < listA.size(); i++) {
int hashCodeA = listA.get(i).hashCode(), hashCodeB = listB
.get(i).hashCode();
if (hashCodeA != hashCodeB)
flag++;
}
if (flag > 0)
return false;
else
return true;
} else {
return false;
}
} else {
return false;
}
}else if(ca==null&&cb==null){
return true;
}
return false;
}

}

[color=green]欢迎批评指正![/color]
展开阅读全文

没有更多推荐了,返回首页