`

比较两个集合是否相等

阅读更多
现在是情况是要比较一个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包,我自己也不想!
当然请各位大虾帮忙解决下。
分享到:
评论

相关推荐

    比较两个集合是否相同(比较两个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来实现。

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

    利用带头结点的单链表实现两个集合的并、交、差运算 本文档的主要内容是使用带头结点的单链表实现两个集合的并、交、差运算。该文档共分为八个部分,分别是题目重述、题目功能描述、概要设计图、程序源代码及注释、...

    两个list比较 取不同的对象

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

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

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

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

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

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

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

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

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

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

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

    数据结构—集合运算实现 实现报告(含代码)

    最后,建立Equals类,用于比较两个集合是否相等,这通常通过遍历两个集合并逐个比较元素来完成。 - 集合的并运算:并运算涉及到将两个集合的所有元素合并到一个新的集合中。这可以通过遍历两个链表并在目标集合中...

    高一数学子集及集合相等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,开发者可以根据...

Global site tag (gtag.js) - Google Analytics