检查两个列表在Java中是否相等

介绍:

Java中的列表是按自然顺序排列的。 因此,如果两个列表包含相同顺序的完全相同的元素,则认为它们是相等的。 在本教程中,我们将看到如何在Java中比较两个列表是否相等。

我们还将介绍仅比较两个列表中的元素并忽略其顺序的方式。

列出平等维护顺序:

众所周知,两个列表具有完全相同的元素并且具有完全相同的顺序时,它们是相等的。 因此, 如果我们关心顺序,可以使用equals()方法进行相等性检查:

Java

@Test
public void equalityCheckOfTwoLists() {List<Integer> list1 = Arrays.asList(1, 2, 3);List<Integer> list2 = Arrays.asList(1, 2, 3);List<Integer> list3 = Arrays.asList(2, 1, 3);assertTrue(list1.equals(list2));assertFalse(list1.equals(list3));}

list1list3包含相同的元素{1、2、3},但顺序不同,因此被认为是不相等的。

列出平等忽略顺序:

如果我们希望忽略相等性检查的元素顺序怎么办?

很多时候我们想要的是检查两个列表是否包含相同的元素,而不管它们在列表中的顺序如何。 让我们介绍实现它的方法:

1.排序列表并进行比较:

如果两个列表都为null ,则返回true 。 否则,如果其中只有一个指向值或两个列表的size()不同,那么我们将返回false 。 如果没有这些条件成立 ,我们将第一个排序两个列表,然后对它们进行比较:

Java

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 nullelse if(list1 == null || list2 == null) {return false;}else if(list1.size() != list2.size()) {return false; }//copying to avoid rearranging original listslist1 = new ArrayList<T>(list1); list2 = new ArrayList<T>(list2);   Collections.sort(list1);Collections.sort(list2);      return list1.equals(list2);
}

请注意,我们已经创建了两个列表的副本,以确保原始列表中的元素保持不变

2.使用

如果列表中的数据是唯一的,即没有重复,我们可以简单地从给定列表中创建TreeSet ,然后使用equals()比较它们:

Java

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 nullelse 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);
}

我们可以通过只进行一个contains()检查而不是创建Sets来进一步简化它:

Java

return list1.containsAll(list2) && list2.containsAll(list1);

但是,请注意,如果我们在数据集中存在重复,这些方法( contains() check / With Sets )将失败。 例如:

Java

List<Integer> list1 = Arrays.asList(1, 2, 3, 3);
List<Integer> list2 = Arrays.asList(3, 1, 2, 2);// will return true, but actual value should be false
System.out.println(list1.isEquals(list2));

在上面的示例中,l ist1包含一个2和两个3,list2包含两个2和一个3 。 不过,这种形式的实现将错误地返回true

3. Apache Commons:

除了编写自己的代码,我们还可以选择Apache Commons Collections实用程序来完成此工作:

Java

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

当两个集合包含具有完全相同基数的完全相同元素时, isEqualCollection()方法将返回true。

结论:

在本教程中,我们学会了检查Java中两个列表是否相等。 现在我们知道以下事实:默认情况下,当两个列表具有相同元素且顺序相同时,它们是相等的。

我们还讨论了如果我们对元素的顺序不太关心的话,可以采用哪些方法进行列表相等性检查。

成为第一个发表评论的人。

翻译自: https://www.javacodegeeks.com/2019/03/check-two-lists-are-equal-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2018年秋季 0680-22T会计基础知识 参考试题

编号&#xff1a;0689 座位号 2018&#xff5e;2019学年度第一学期期末考试 老年心理健康试题 2019年1月 一、名词解释&#xff08;本大题共6小题&#xff0c;每题5分&#xff0c;共30分&#xff09; 期待性焦虑 忧郁&#xff1a; 急躁&#xff1a; 暴躁&#xff1a; 心理…

物联网在水位监测中的应用

注&#xff1a;本文来自 成都亿佰特 基于E820-DTU(2I2-433L)和E90-DTU(433C30)的水位监测应用 水位资料与人类社会生活和生产关系密切。水利工程的规划、设计、施工和管理需要水位资料。桥梁、港口、航道、给排水等工程建设也需水位资料。防汛抗旱中&#xff0c;水位资料更为…

接入层工业交换机、汇聚层工业交换机与核心层工业交换机区别

了解工业交换机的人都知道&#xff0c;工业交换机被划分为接入层工业交换机、汇聚层工业交换机和核心层工业交换机&#xff0c;今天&#xff0c;飞畅科技的小编就来为大家详细说下这三种工业交换机&#xff0c;感兴趣的朋友就一起来看看吧&#xff01; 首先&#xff0c;核心层工…

php作菜单,PHP制作下拉透明菜单

下拉透明菜单var mmenus new Array();var misShow new Boolean();misShowfalse;var misdown new Boolean();misdownfalse;var mnumberofsub0;var musestatusfalse;var mpopTimer 0;mmenucolor#89CB10;mfontcolorMenuText;mmenuoutcolor#ADEF34;mmenuincolor#B5E74E;…

【渝粤教育】国家开放大学2018年秋季 0707-21T办公室实务 参考试题

科目编号&#xff1a;0710 座位号 2018-2019学年度一学期期末考试 幼儿园课程活动设计 试题 2019年 1 月 一、单选题&#xff08;本大题共5小题&#xff0c;每小题4分&#xff0c;共计20分&#xff09; &#xff08;★请考生务必将答案填入到下面对应序号的答题框中★&#xf…

E820-DTU与昆仑通态组态软件联机

随着工业自动化水平的迅速提高&#xff0c;计算机在工业领域的广泛应用&#xff0c;人们对工业自动化的要求越来越高&#xff0c;种类繁多的控制设备和过程监控装置在工业领域的应用&#xff0c;使得传统的工业控制软件已无法满足用户的各种需求。 在开发传统的工业控制软件时&…

【渝粤教育】国家开放大学2018年秋季 1007t公司财务 参考试题

试卷代号&#xff1a;1025 保险学概论 试题 2019年1月 注意事项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试 结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完 考卷和答题纸后才可离开考场…

BLE蓝牙和传统蓝牙的区别

在移动设备上使用的蓝牙协议大多都是4.0&#xff0c;而蓝牙的4.0又有两个分支&#xff0c;经典4.0蓝牙和BLE4.0蓝牙&#xff0c;经典4.0就是传统的3.0蓝牙升级而成&#xff0c;向下兼容。而BLE4.0蓝牙是一个新的分支&#xff0c;不向下兼容。相较于传统的蓝牙&#xff0c;BLE蓝…

什么是核心交换机?如何选择核心交换机?

在系统组网中&#xff0c;经常会提到接入交换机、汇聚交换机、核心交换机。通常&#xff0c;我们将网络中直接面向用户连接或访问网络的部分称为接入层&#xff0c;将位于接入层和核心层之间的部分称为分布层或汇聚层&#xff0c;而将网络主干部分称为核心层。那么什么是核心交…

oracle 测试试题,oracle试题

㈠ oracle考试题1.数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。2.Oracle数据库专的版属本&#xff1a;Oracle 8i ,oracle 9i,oracle 10g.最后一个是目前最流行&#xff0c;针对oracle 10g又有标准版1、标准版、企业版和个人版这四个版本。3.数据库对象&…

【渝粤教育】国家开放大学2018年秋季 1087t数学分析专题研究 参考试题

试卷代号&#xff1a;1116 机电控制工程基础 试题&#xff08;半开卷&#xff09; 2019年1月 一、单项选择题&#xff08;每小题3分&#xff0c;共15分&#xff09; 1&#xff0e;一阶系统的传递函数为5sl&#xff0c;则其时间常数为( )。 A&#xff0e;0.5 B&#xff0e;5 C&a…

5W-Lora电台的远距离传输优势

本文来自 成都亿佰特 无线数传电台作为一种通讯媒介&#xff0c;与光纤、微波、明线一样&#xff0c;有一定的适用范围&#xff1a;它提供某些特殊条件下专网中监控信号的实时、可靠的数据传输&#xff0c;具有成本低、安装维护方便、绕射能力强、组网结构灵活、覆盖范围远的特…

在Kubernetes上使用Prometheus Operator监视应用程序

您可以使Prometheus配置了解您的应用程序在其中运行的Kubernetes环境。在先前的博客文章中 &#xff0c;我已经描述了如何手动执行该操作。 Prometheus Operator是Kubernetes的扩展&#xff0c;它以更自动化和有效的方式管理Prometheus监视实例。 Prometheus Operator允许您将…

【渝粤教育】国家开放大学2018年秋季 1166t汉语通论 参考试题

试卷代号&#xff1a;1187 行政法与行政诉讼法 试题 2019年1月 一、选择题&#xff08;共20分&#xff09; &#xff08;一&#xff09;单项选择题&#xff08;每小题只有一项答案正确&#xff0c;请将正确答案的序号填在括号内。每小题1分&#xff0c;共10分&#xff09; 1.行…

什么是网管交换机?

交换机的作用我们就不多说了&#xff0c;熟悉通信领域的人都知道交换机是目前我们进行数据通信或者联网使用最多的一种设备。因为使用的多&#xff0c;所以交换机的种类也非常多&#xff0c;其中最常见的就是网管交换机和非网管&#xff08;傻瓜&#xff09;交换机。非网管交换…

无线模块在“水盾”防溺水安全预警系统的应用

一、"水盾"防溺水安全预警系统简介 "水盾"防溺水安全预警系统&#xff08;下文简称&#xff0c;"水盾"系统&#xff09;&#xff0c;主要由5大部分组成&#xff1a;客户端、转发中继系统主机、系统软件、报警终端。 "水盾"系统的客户端…

【渝粤教育】国家开放大学2018年秋季 1313T学前儿童卫生与保健 参考试题

试卷代号&#xff1a;1322 消费者行为学 试题 2019年1月 注意事项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完考卷和答题纸后才可离开考场…

oracle数据库改名步骤,oracle 11g2 数据库改名详细解释 oracle数据库改名详解 oracle database 改名详解 dbname...

前面讲过修改sid名字&#xff0c;虽然已经修改过了实例名(sid)&#xff0c;但是数据库的名称(dbname还是原来的名称orcl)下面详细描述&#xff0c;更改数据库名字的。详细过程如下&#xff1a;1、更改存档日志&#xff0c;默认安装完的oracle 测试环境是非存档模式。要改成存档…

java wcf_尝试将WCF映射到Java术语

java wcf通过写这篇文章&#xff0c;我冒着被.NET和Java社区拒绝的巨大风险。 这是为了说明Windows Communication Foundation的WCF用Java来解释。 从WCF到Java的映射并不简单。 我缺乏对WFC使用者应该了解的与服务通信类型的了解&#xff1a;请求/响应或异步消息传递。 我很难…

工业级路由器和家用路由器的区别

一、大家可能在生活中都遇到过这样的问题&#xff0c;比如在商场或者饭店等人流量比较集中的地方&#xff0c;连接商家的WIFI的时候总是会出现掉线的情况发生或者是在自己家中&#xff0c;如果自己家的路由器连接的人多了&#xff0c;就可能会出现掉线的情况出现&#xff0c;连…