`

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

阅读更多
受这篇文章启发:http://rijin.iteye.com/blog/1868186

如果两个对象相同,那么它们的hashCode值一定相同;如果两个对象的hashCode相同,它们并不一定相同

不知道大家怎么实现,下面是我的代码:
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;
	}

}

欢迎批评指正!
分享到:
评论

相关推荐

    比较两个集合是否相同(比较两个List内容是否相同)

    比较两个集合是否相同(比较两个List内容是否相同) 利用Java反射机制,获取到字段名、方法名、字段值,进行逐个比较,此处本人封装好了工具类,接收的是泛型,调用者只需要传入两个实体List即可进行比较,返回true...

    判定两个集合是否相等的概率算法

    这是在算法分析与复杂性课程里面,利用概率算法判定两个集合是否会相等的代码

    两个集合比较(新增、编辑、删除)

    本文将深入探讨如何比较两个集合,并关注在Java中使用List进行对比时的“新增”、“编辑”和“删除”操作。首先,我们需要理解集合的基本概念。集合是存储一组元素的数据结构,而List是一种有序的集合,允许重复元素...

    比较两个集合大小,c++源代码,

    本文件为c++源代码,比较两个集合的大小,若集合的长度不等就退出,集合元素值累加相等则相等,供各位参考!

    取两个集合的交集

    根据给定的信息,本文将详细解释“取两个集合的交集”的相关概念、实现方法以及具体的应用场景。本文主要分为以下几个部分:集合的基本概念、如何计算两个集合的交集、示例代码分析与理解。 ### 一、集合的基本概念...

    将几个集合中相同元素合并

    `same_char`方法用于检查两个字符串是否至少有一个相同的字符。 ```java public boolean same_char(String aa, String bb) { // ... 省略部分代码 ... return flag1; } ``` 此方法通过遍历两个字符串来判断是否...

    Java判断2个List集合是否相等(不考虑元素的顺序)

    Java判断2个List集合是否相等...如果两个集合相等,则返回true。否则,返回false。 在Java中判断两个List集合是否相等,不考虑元素的顺序,可以通过 重写equals方法和hashCode方法 或 使用Java 8的Stream API来实现。

    两个list比较 取不同的对象

    - 该类重写了`equals`方法,用于比较两个`Student`对象是否相同。这是实现列表比较的关键步骤之一。 3. **比较两个列表的不同项**: - 需要遍历第一个列表,对于每个元素,检查它是否存在于第二个列表中。 - ...

    利用带头结点的单链表实现两个集合的并、交、差运算.docx

    本文档详细阐述了如何利用带头结点的单链表来实现两个集合的并集、交集和差集运算。 首先,在题目重述部分,我们明确了解决问题的目标,即通过带头结点的单链表结构来构建并、交、差运算的具体实现。头结点的存在是...

    两个List集合取相同重复数据的方法

    两个List集合取相同重复数据的方法 在Java编程中,集合操作是非常常见的,而在实际开发中,我们经常遇到需要从两个List集合中提取相同的重复数据的情况。这篇文章将为大家分享一个关于两个List集合取相同重复数据的...

    C#使用Equals()方法比较两个对象是否相等的方法

    这个方法在处理对象间的等价性判断时非常常见,特别是在需要确定两个变量或实例是否表示相同数据的情况下。`Equals()`方法是Object类的一个成员,因此所有C#类都默认继承了这个方法。然而,对于自定义类,`Equals()`...

    Java比较两个List的值是否相等的方法

    在Java编程中,比较两个List的值是否相等是一个常见的需求,特别是在处理数据集合时。这里我们探讨一种方法,用于判断两个List是否包含相同的元素,不论它们的顺序如何。这个方法的关键在于比较List的大小以及排序后...

    java比较两个list是否相同equals的代码详解

    Java比较两个List是否相同的equals方法详解 在 Java 编程中,比较两个 List 是否相同是一个非常重要的操作。今天,我们将探索 Java 中比较两个 List 是否相同的 equals 方法的实现。 首先,让我们了解一下为什么...

    c++程序设计实现集合交集并集差集.pdf

    jiao 函数,用于计算两个集合的交集;bing 函数,用于计算两个集合的并集;cha 函数,用于计算两个集合的差集。 最后,我们在 main 函数中演示了如何使用 int_set 类,例如创建集合、输入集合、删除元素、添加元素...

    高一数学子集及集合相等PPT学习教案.pptx

    用A=B表示两个集合相等。 接着,我们讨论了真子集的概念。如果A是B的子集,但A不等于B(即A中至少有一个元素不在B中),那么A就是B的真子集,记作A⊂B。例如,A={1,3,5}是B={1,2,3,4,5,6}的真子集,因为A的所有元素...

    C++语言交并差集合运算

    - **并集**:两个集合的并集是指属于这两个集合中的任何一个的所有元素组成的集合。 - **差集**:集合A与集合B的差集是指属于集合A但不属于集合B的所有元素组成的集合。 ### 二、链表结构介绍 #### 1. 链表概述 ...

    SQL 比较一个集合是否在另一个集合里存在的方法分享

    接下来,比较两个集合是否存在相同的元素。使用变量`@c`和`@c2`分别存储两个集合的元素个数。`@c`计算的是原始集合的元素个数,`@c2`计算的是两个集合交集的元素个数。这里,通过将第一个集合与第二个集合进行内连接...

    集合的并交差运算

    同样,如果集合已经排序,我们可以同时遍历两个集合,只有当当前元素在两个集合中都存在时才将其添加到结果集合。如果没有排序,堆排序可以先应用于每个集合,然后采用双指针技术,从两个堆的顶部开始比较,将相等的...

    获取两个数组相同的元素或不同的元素输出

    `retainAll()`方法用于保留两个集合的交集,`removeAll()`方法则用于移除指定集合的元素。 总之,Java提供了多种方式来获取两个数组的相同元素和不同元素。从简单的线性搜索到高效的哈希表和流API,开发者可以根据...

    搜索两个数组中相同的部分,并建立一个新数组

    比较两个数组的相同部分,实际上就是在寻找两个数组中存在相同值的元素。这涉及到对数组进行遍历,比较每个元素是否相等的过程。 ### 二、算法实现:搜索两个数组中相同的部分 #### 1. 双重循环法 代码片段中展示...

Global site tag (gtag.js) - Google Analytics