首页 > 编程语言 >快速比较JAVA中两个集合是否相等

快速比较JAVA中两个集合是否相等

时间:2022-12-05 10:37:59浏览次数:35  
标签:相等 JAVA List list1 list2 集合 return false null


有几个方法:

1)如果是不在乎顺序,只要内容相同就可以认为相等,则:

public <T extends Comparable<T>> boolean isEquals(List<T> list1, List<T> list2){     
if (list1 == null && list2 == null) {
return true;
}
//Only one of them is null
else if(list1 == null || list2 == null) {
return false;
}
else if(list1.size() != list2.size()) {
return false;
}

//copying to avoid rearranging original lists
list1 = new ArrayList<T>(list1);
list2 = new ArrayList<T>(list2);

Collections.sort(list1);
Collections.sort(list2);

return list1.equals(list2);
}

如果LIST中没重复的元素,则可以:

public <T extends Comparable<T>> boolean isEquals(List<T> list1, List<T> list2){     
if (list1 == null && list2 == null) {
return true;
}
//Only one of them is null
else if(list1 == null || list2 == null) {
return false;
}
else if(list1.size() != list2.size()) {
return false;
}

Set<T> set1 = new TreeSet<>(list1);
Set<T> set2 = new TreeSet<>(list2);

return set1.equals(set2);
}

但注意如果有重复的话,使用上面的方法则不行,比如:
 

​​List<Integer> list1 = Arrays.asList(​​​​1​​​​, ​​​​2​​​​, ​​​​3​​​​, ​​​​3​​​​);​​
​​List<Integer> list2 = Arrays.asList(​​​​3​​​​, ​​​​1​​​​, ​​​​2​​​​, ​​​​2​​​​);​​
​​System.out.println(list1.isEquals(list2));​​
​​上面会认为是元素相同,个数相同,但实际上明显不是严格的相等了,最好是用apache common包:​​
​​List<Integer> list1 = Arrays.asList(​​​​1​​​​, ​​​​2​​​​, ​​​​3​​​​, ​​​​3​​​​);​​
​​List<Integer> list2 = Arrays.asList(​​​​3​​​​, ​​​​1​​​​, ​​​​3​​​​, ​​​​2​​​​);​​

​​System.out.println(CollectionUtils.isEqualCollection(list1, list2)); ​​​​//true​​

标签:相等,JAVA,List,list1,list2,集合,return,false,null
From: https://blog.51cto.com/u_14230175/5911451

相关文章

  • Java同步器之ReentrantLock源码分析(一)
    一、概述ReentrantLock是Java并发包中提供的一个可重入的互斥锁。ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性。只不过相比原生的Sync......
  • 两道面试题,带你解析Java类加载机制
    在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题:classGrandpa{static{System.out.println("爷爷在静态代码块");}}classFatherextendsGra......
  • JAVA 解压缩代码写法
    packagecom.chinaunicom.asset.common.utils.compress;importlombok.extern.slf4j.Slf4j;importorg.apache.commons.compress.archivers.ArchiveEntry;importorg.......
  • Java8新特性之方法引用
    1.1基本概念方法引用主要指通过方法的名字来指向一个方法而不需要为方法引用提供方法体,该方法的调用交给函数式接口执行。方法引用是在特定场景下lambda表达式的一种......
  • JavaScript入门⑤-欲罢不能的对象原型与继承-全网一般图文版
    JavaScript入门系列目录JavaScript入门①-基础知识筑基JavaScript入门②-函数(1)基础{浅出}JavaScript入门③-函数(2)原理{深入}执行上下文JavaScript入门④-万物皆......
  • javascript中屏蔽esc键
     今天有客户说网页输入时,不小心按ESC键,结果把结果清除了,想屏蔽,其实是可以的,虽然要求怪怪,JAVASCRIPT可以实现:<scripttype="text/javascr......
  • jaxb中对java.util.Date的处理
    JAXB是个好东西,转换JAVAOBJECT到XML的,最近发现JAXB中对java.util.Date的转换有些要注意的地方,笔记之。比如有一个POJO如下:importjava.util.Date;p......
  • javascrpt 监听元素变化的两个API
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"c......
  • 1.4 Apache Hadoop完全分布式集群搭建-hadoop-最全最完整的保姆级的java大数据学习资
    目录1.4ApacheHadoop完全分布式集群搭建1.4.1虚拟机环境准备1.4.2集群规划1.4.3安装Hadoop1.4.3.1集群配置1.4.3.1.1HDFS集群配置1.4.3.1.2MapReduce集群配置1.4.......
  • Web入门:JavaScript文字动画
    欢迎来的我的小院,恭喜你今天又要涨知识了!案例内容利用JavaScript实现文字逐步展现的动画效果。演示学习<!DOCTYPEhtml><htmllang="en"><head><metach......