比较两个List的内容是否相等

2023-05-16

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、问题

现在有两个ArrayList列表,列表中的元素是String字符串。比较这两个列表中的内容相等(可以顺序不一致)。如:

    List<String> lsit1 = new ArrayList<>();
    List<String> lsit2 = new ArrayList<>();

    list1.add("1");
    list1.add("1");
    list1.add("3");
    list1.add("2");
           
    list2.add("1");
    list2.add("3");
    list2.add("2");
    list2.add("2");

先贴上最终解决的代码:

    public booelan equalsList(List<String> list1, List<String> list2){
            // null情况
            if ( (list1 == null && list2 != null) 
                 || (list1 != null && list2 == null) ) {
                return false;
            }
    
            // 大小比较
            if (list1.size() != list2.size) {
            return false;
            }
            String[] arr1 = list1.toArray(new String[]{});
            String[] arr2 = list2.toArray(new String[]{});
            Arrays.sort(arr1);
            Arrays.sort(arr1);
            return Arrays.equals(arr1,arr2);
    }

二、解决过程

首先可以想到的是,先null情况和两个列表size的比较。

  • 如果只有一个列表为空,那么肯定不相等;
  • 如果两个列表的size不相等,那么这两个列表的内容必定不相等
    // null情况
    if (list1 == null) {
        return list2 == null;
    }
    
    // 大小比较
    if (list1.size() != list2.size) {
        return false;
    }

大小和Null的情况已经判断完了。现在的两个列表必定是两个不为空且大小相等的列表。也就是说,现在只要比较内容是否都相同(忽略顺序)就可以了。有人认为可以用contains 或者 containsAll来解决,如:

  • 使用contains()
    for (String str : list1) {
         if (!list2.contains(str)) {
            return false;
        }
    }
    return true;

或者

  • 使用containsAll()
    if (lsit1.containsAll(list2) && list2.containsAll(list1)) {
         return true;   
    }
    return false;

 

但是使用这两者方法都是用问题的,因为ArrayList中的元素可重复的。所以如果list1中为{"1","1","3","2"},list2中为{"1","3","2","2"},这个时候上面两种办法结果都会为true,显示这两个列表是不相同的。因为containsAll()中还是调用了contains方法。

使用contains和containsAll更适合与去重后的列表进行比较。但是这里的比较是不去重且无序的,所以不能用这个办法。

说到无序,大概就可能知道该怎么解决了。既然是无序的,那就把这两个list的内容排序再逐个的进行比较不就可以了?所以,Arrys.sort(),Arrays,equals(),就排上了用场。

    String[] arr1 = list1.toArray(new String[]{});
    String[] arr2 = list2.toArray(new String[]{});
    Arrays.sort(arr1);
    Arrays.sort(arr1);
    return Arrays.equals(arr1,arr2); //这里可以自己遍历,但是明显使用Arrays.equals()方法更加的方便。

三、注意事项

但是需要注意的是,使用Arrys.sort(),Arrays,equals(),List中存放的对象必须实现了Comparable接口并重写了compareTo()方法和equals()方法。因为Arrays.sort()和Arrays.equals()会调用类的compareTo方法和equals()方法。

上面的例子使用的是String类型,String类型中已经实现了Comparable接口并重写了compareTo()方法和equals()方法以及hashCode()方法。

23f56e3831e5dadb7b9b2f38714535f0236.jpg

14ce7eff16efd0cf6f2a88096d21d9c8198.jpg

f9018567531360b43879359f0692d0bbdf0.jpg

如果List中存放的类没有实现comparable接口,在使用Arrays.sort()是会抛出异常 java.lang.ClassCastException: XXX  cannot be cast to java.lang.Comparable。

如果只实现了Comparable接口并重写了compareTo()方法,但是没有重写equals()和hashCode()方法。会导致结果一直为false,以为他比较的是两个对象的地址。所以在使用list比较时最好使用String 这种已经实现了Comparable接口的并已经重写了compareTo()、equals()、hashCode()方法的类比较方便。

转载于:https://my.oschina.net/u/3428296/blog/1829599

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较两个List的内容是否相等 的相关文章

  • RSA签名的PSS模式

    本文由云 43 社区发表 作者 xff1a mariolu 一 什么是PSS模式 xff1f 1 1 两种签名方式之一RSA PSS PSS Probabilistic Signature Scheme 私钥签名流程的一种填充模式 目前主流
  • 爬虫mm131明星照片

    1 39 39 39 2 1 爬取以下站点中各个明星图片 xff0c 分别单独建文件夹存放 3 起始URL地址 xff1a http www mm131 com mingxing 4 39 39 39 5 import os 6 impor
  • 使用IDEA工具配置和运行vue项目(详细其中的坑)

    刚来公司实习发现公司的前端使用的是vue xff0c 之前根本就没有听说过 然后一上来就需要看代码 xff0c but but 就是没有文档什么的东西 xff0c 就需要自己去研读 xff0c 我就想去运行其中的前端和后端联调起来方便理解
  • pycharm永久激活方式

    网上找了好多 xff0c 还是这个最方便快捷 1 下载 链接 https pan baidu com s 1axPsIaedtZDRG7lTup9b5g 密码 7vxp xff0c 并将 JetbrainsCrack 2 10 releas
  • Majority Element出现次数超过一半的数字

    Given an array of size n find the majority element The majority element is the element that appears more than n 2 times
  • C#实现WEB服务器

    一 HTTP协议的作用原理 WWW是以Internet作为传输媒介的一个应用系统 xff0c WWW网上最基本的传输单位是Web网页 WWW的工作基于客户机 服务器计算模型 xff0c 由Web 浏览器 客户机 和Web服务器 服务器 构成
  • 51学习计划

    hhhhhhhhhhh 来了11111111111111111111111111111111111111111111111111111111111111111111111 555 4444 66 77 88 99 00 61 61 61 6
  • Linux 配置静态IP

    在新安装的Linux系统命令行下 xff0c 敲入 xff1a ifconfig 显示如下界面 上面这张图显示网卡没有启动 xff0c 那么我们敲入代码 xff1a ifup eth0启动网卡 网卡启动后 xff0c 我们可以看出 xff0
  • 关于硬件渲染了解一下

    浏览器的渲染方式 xff0c 主要分为两种 xff0c 第一种是软件渲染 xff0c 第二种是硬件渲染 如果绘制工作只是由 CPU 完成 xff0c 那么称之为软件渲染 xff0c 如果绘制工作由 GPU 完成 xff0c 则称之为硬件渲染
  • 七牛云PHP 20m文件上传不了,tp上传到七牛 文件大了就无法上传 但是没有限制

    config php没有限制 如下 39 UPLOAD SITEIMG QINIU 39 61 gt array 39 rootPath 39 61 gt 39 39 39 saveName 39 61 gt array 39 uniqid
  • Debian6.0.7的archive mirror列表真接地气

    为什么80 的码农都做不了架构师 xff1f gt gt gt 转载于 https my oschina net cers blog 111135
  • 05-03-通过组策略(域)配置加域客户端补丁自动更新

    系统工程师实战培训 05 部署补丁管理服务器 03 通过组策略 域 配置加域客户端补丁 自动更新 作者 xff1a 学 无 止 境 QQ交流群 xff1a 454544014 在100 Admin01上安装 组策略 管理工具 创建完成后 x
  • sql server 2016 json 解析方法

    前几天发现了sql server 2016支持了json 项目需要所以安装了 用了一下 方便了很多 xff0c 写一下小笔记方便日后查看 xff0c 也希望各位大神指正共同学习 sql server 2016 安装图解网上很多 xff0c
  • Windows Server 系列服务器之轻松修改远程端口

    Windows系列的服务器 xff0c 远程端口号默认的是3389 xff0c 当然 xff0c 一些服务器服务商可能会是其他的端口 在生产环境中 xff0c 对于服务器安全来讲 修改远程端口和屏蔽一些不用的端口是非常有必要的 在安装好服务
  • 使用组策略进行软件升级

    使用组策略进行软件升级 升级包括强制升级和可选升级 xff0c 强制升级就是强制用户卸载已经安装的旧版本软件 xff0c 安装新版软件 可选升级就是保留旧版本的情况下安装新版本 本示例演示强制升级部署给用户的画图软件 任务 xff1a u
  • Linux查看系统上的时间和日期

    大家好 xff0c 本篇博客介绍了两个关于Linux里的时间和日期的命令 xff0c 有些内容是我自己翻译的 xff0c 如果有不足 xff0c 还望读者多多指教 本篇博客的符号说明 xff1a 里的值都不是固定的 xff0c 而不是可选的
  • pytest文档27-pytest分布式执行(pytest-xdist)

    前言 平常我们手工测试用例非常多时 xff0c 比如有1千条用例 xff0c 假设每个用例执行需要1分钟 如果一个测试人员执行需要1000分钟才能执行完 xff0c 当项目非常紧急的时候 xff0c 我们会用测试人力成本换取时间成本 xff
  • 五一学习计划

    hhhhhhhhhhh 来了11111111111111111111111111111111111111111111111111111111111111111111111 555 4444 66 77 88 99 00 标题1 标题2 标题
  • linux脚本执行进度条,shell脚本实现进度条

    使用shell脚本编写进度条 可已加入到shell脚本当中 主要作用 xff1a 好看 美观 没毛用 一 普通进度条 xff1a bin bash b 61 39 39 for i 61 0 i lt 61 20 i 43 43 do le
  • mysql单表调整大小_MySQL单表大小问题

    在老版本的MySQL 3 22中 xff0c MySQL的单表限大小为4GB xff0c 当时的MySQL的存储引擎还是ISAM存储引擎 但是 xff0c 当出现MyISAM存储引擎之后 xff0c 也就是从MySQL 3 23开始 xff

随机推荐

  • AC日记——简单密码 openjudge 1.7 10

    10 简单密码 总时间限制 1000ms 内存限制 65536kB 描述 Julius Caesar曾经使用过一种很简单的密码 对于明文中的每个字符 xff0c 将它用它字母表中后5位对应的字符来代替 xff0c 这样就得到了密文 比如字符
  • 触摸事件 - UIControlEvents

    首先 xff0c UIControlEvents有这个几种 xff1a UIControlEventTouchDown 61 1 lt lt 0 on all touch downs UIControlEventTouchDownRepea
  • PyCharm+cmd中使用Anaconda 与 新建Python环境(Windows)

    PyCharm配置Anaconda Anaconda的安装在网上已经有了 xff0c 这里主要讲之前已经安装了已经配置好Python环境变量以及PyCharm的情况下 使用Anaconda 即在PyCharm中出现了 ModuleNotFo
  • 00018计算机应用基础知识点归纳,自考00018计算机应用基础汇总资料

    A 这些文件目前均处于打开状态 B 这些文件正在排队等待打印 C 这些文件最近用Word处理过 D 这些文件是当前目录中扩展名为DOT和文件 62 在Word中 xff0c 移动光标到文件尾的快捷键组合是 A Ctrl 43 PgDn B
  • 给Debian安装Xfce桌面

    1 sudo apt get install xorg xdm xfce4 2 vi xinitrc xff0c 然后输入 xff1a exec xfce4 xff0c 在终端输入startx命令后就能进入xfce4 xff0c 或直接在终
  • python七段数码管的详解,Python入门基础:七段数码管绘制

    1 在学习Python的过程中 xff0c 运用所学的一些基础知识 xff0c 进行一些简单的编程 xff0c 可以收获很多乐趣 在生活中 xff0c LED灯无处不在 xff0c 荧幕显示的广告词 xff0c 给我们呈现出动态的视觉效果
  • 锐捷和华为重分布实验

    锐捷 华为路由重分布实验 实训目的 xff08 1 xff09 熟悉路由器的基本配置 xff1b xff08 2 xff09 掌握路由重分布配置 实训技术原理 为了实现全网互通 xff0c 我们需要路由器能在不同协议之间交换路由信息或者全网
  • md编辑器活动

    312313 4142131323131313 545465645
  • app.jsNodejs启动测试服务

    39 use strict 39 var express 61 require 39 express 39 var app 61 express 39 39 var fs 61 require 39 fs 39 app get 39 dat
  • python之zip打包

    import zipfile 压缩 z 61 zipfile ZipFile 39 z zip 39 39 w 39 z write 39 xo xml 39 z write 39 xxxoo xml 39 z close 解压 z 61
  • CentOS 7之btrfs文件系统

    核心特性 xff1a 支持多物理卷 xff1a btrfs 可由多个底层物理卷组成 xff0c 支持 RAID xff0c 以联机 添加 移除 xff0c 修改 物理卷 写时复制更新机制 xff08 CoW xff09 xff1a 复制 更
  • 用symbol来获得ShadowSSDT的原始地址和函数名

    在网上看了下 xff0c 获得ShadowSSDT的函数名和原始地址的方法和文章不是很多 比较简单的应该算是设计张函数名表和用symbol的方法 个人觉得用symbol来获得ShadowSSDT还是比较方便的 xff0c 而且自己也不用去创
  • GitLab-ce的汉化

    一 汉化指南 xff0c 基于 Larry Li 版汉化指南 修改 以9 0 stable zh分支为例 源码安装汉化 推荐按照 gitlab ce 源代码中 doc install installation md 的内容手工安装 GitL
  • 打印杨辉三角形

    题目 xff1a 打印出杨辉三角形 程序分析 xff1a 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 定义的是二维数组 xff0c 为了使输出的结果看起来漂亮一点 xff0c 可以用 for xf
  • VMware虚拟机文件损坏修复方法

    一 说明一下起因 xff1a 今天在XP虚拟机中一冲动下载一个5点多GB的PT文件 xff0c 忘记此虚拟文件 xff08 vmdk文件 xff09 仅有2G空间 xff0c 结果超成了空间不足 xff0c VMware7 1提示出错 xf
  • debian下增强bash的自动补全功能

    在我们新安装的Debian系统时 xff0c 发现很多命令都不能自动补全 xff0c 这是很不方便的 xff0c 因为每个人的精力都是有限的 xff0c 不是对每个命令的每一个细节都能完全记住 xff0c 因此自动补全是一个很实用的功能 x
  • 华为RH5885H v3服务器RAID设置及问题解析

    今年春 xff0c 华为全球首发基于英特尔至强E7 v2处理器的系列服务器新品 xff0c 其中包括RH8100 V3八路服务器 RH5885H V3四路服务器和E9000刀片服务器的四路计算节点CH242 V3服务器 最近单位新购了几台华
  • Invalid or corrupt jarfile坑爹问题解决

    打包一个可以直接利用java jar jar cvfm lottery jar MANIFEST MF jdbc properties com 如果出现 xff1a java io IOException invalid header fi
  • ios tableViewCell 高度自适应

    开发过程中 xff0c 会很少使用系统自带的cell xff0c 一般都会自定义cell xff0c 用来展示各式各样的界面布局 xff0c 所以我们要自定义cell 项目中用过很多种cell高度自适应的算法 xff0c 都感觉挺麻烦的 x
  • 比较两个List的内容是否相等

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 问题 现在有两个ArrayList列表 xff0c 列表中的元素是String字符串 比较这两个列表中的内容相等 可以顺序不一致 如 xff1a List lt Str