当前位置: 代码网 > it编程>编程语言>Java > Java比较集合是否相等的技巧分享

Java比较集合是否相等的技巧分享

2025年06月25日 Java 我要评论
一、集合相等的定义说两个东西是否相等,首先要弄清楚这里相等是什么意思,值相等,内存地址相等还是别的什么相等。1.1 集合相等的基本概念集合大小相同集合中的元素相同元素的顺序(对于有序集合)和重复性(对

一、集合相等的定义

说两个东西是否相等,首先要弄清楚这里相等是什么意思,值相等,内存地址相等还是别的什么相等。

1.1 集合相等的基本概念

  • 集合大小相同
  • 集合中的元素相同
  • 元素的顺序(对于有序集合)和重复性(对于允许重复的集合)是否一致

1.2 不同集合类型的相等性特点

  • list:有序,允许重复
  • set:无序,不允许重复
  • map:键值对存储,键唯一

二、java中比较集合相等的快速方法

java本身是提供了相等比较的方法的,这里来看看都有哪些。

2.1 使用equals()方法

equals()方法在集合类中的实现原理是都有自己的特点的,我们下面综合实际案例一起看看:

  • 对于list,比较元素顺序和内容
import java.util.arraylist;
import java.util.list;

public class arraylistcomparison {

    public static void main(string[] args) {
        // 创建第一个arraylist
        list<string> list1 = new arraylist<>();
        list1.add("apple");
        list1.add("banana");
        list1.add("cherry");

        // 创建第二个arraylist
        list<string> list2 = new arraylist<>();
        list2.add("apple");
        list2.add("banana");
        list2.add("cherry");

        // 创建第三个arraylist(用于测试不相等的情况)
        list<string> list3 = new arraylist<>();
        list3.add("apple");
        list3.add("cherry");
        list3.add("banana");

        // 比较list1和list2是否相等
        boolean isequal1 = list1.equals(list2);
        system.out.println("list1和list2是否相等: " + isequal1);

        // 比较list1和list3是否相等
        boolean isequal2 = list1.equals(list3);
        system.out.println("list1和list3是否相等: " + isequal2);
    }
    
}

在这里插入图片描述

上面的执行结果可以很明显的看出,即使元素内容一样,顺序不一样,他们的结果也是不同的。

  • 对于set,比较元素内容,忽略顺序
import java.util.hashset;
import java.util.set;

public class hashsetcomparison {
    public static void main(string[] args) {
        // 创建两个hashset对象
        set<integer> set1 = new hashset<>();
        set<integer> set2 = new hashset<>();
        set<integer> set3 = new hashset<>();

        // 添加元素到set1
        set1.add(1);
        set1.add(2);
        set1.add(3);

        // 添加元素到set2,顺序不同
        set2.add(3);
        set2.add(1);
        set2.add(2);

        // 添加元素到set3,顺序不同
        set3.add(3);
        set3.add(1);
        set3.add(2);
        set3.add(4);

        // 输出结果
        system.out.println("set1和set2是否相等: " + set1.equals(set2));
        system.out.println("set2和set3是否相等: " + set2.equals(set3));
    }

}

在这里插入图片描述

上面执行的结果不难看出,set集合,只在乎元素是否相同,不在乎里面的顺序。

  • 对于map,比较键值对
import java.util.hashmap;
import java.util.map;

public class hashmapcomparison {
    public static void main(string[] args) {
        // 创建两个hashmap对象
        map<string, integer> map1 = new hashmap<>();
        map<string, integer> map2 = new hashmap<>();
        map<string, integer> map3 = new hashmap<>();

        // 添加键值对到map1
        map1.put("apple", 1);
        map1.put("banana", 2);
        map1.put("cherry", 3);

        // 添加键值对到map2,顺序不同
        map2.put("apple", 1);
        map2.put("cherry", 3);
        map2.put("banana", 2);

        // 添加键值对到map3,值不同
        map3.put("banana", 3);
        map3.put("apple", 3);
        map3.put("cherry", 3);

        // 输出结果
        system.out.println("map1和map2是否相等: " + map1.equals(map2));
        system.out.println("map2和map3是否相等: " + map3.equals(map2));
    }

}

在这里插入图片描述

从上面的执行结果可以看出,map比较的是键值对是否一致,也是和顺序无关的。

值得注意的是,map本身建议使用entryset()方法再进行equals方法。

在这里插入图片描述

三、值得推荐的写法和三方库

实际有很多第三方库都实现了集合的比较,例如apache commons collections(这个有的版本list比较是不区分顺序的,实际操作要注意)、google guava、和hutool

使用这些三方库可以有效的提高代码的可读性,并且使用起来都比较简洁,传说有的三方库还有一些性能提升(这个我没验证过)。

3.1 推荐使用库 hutool

hutool是一个国产的java工具包,提供了丰富的集合操作功能,同时还包含文件操作、加密解密、日志等其他实用工具。它简化了集合的比较和操作,例如合并、交集、差集等。

  • 依赖引入
<dependency>
    <groupid>cn.hutool</groupid>
    <artifactid>hutool-all</artifactid>
    <version>5.7.11</version>
</dependency>
  • 示例代码
import cn.hutool.core.collection.collutil;

import java.util.arraylist;
import java.util.list;

public class hutoolexample {

    public static void main(string[] args) {
        list<string> list1 = new arraylist<>();
        list1.add("apple");
        list1.add("banana");
        list1.add("cherry");

        list<string> list2 = new arraylist<>();
        list2.add("apple");
        list2.add("banana");
        list2.add("cherry");

        // 比较两个集合是否相等
        boolean isequal = collutil.equals(list1, list2);
        system.out.println("list1和list2是否相等: " + isequal); // 输出 true
    }
    
}

3.2 不用三方库的推荐写法 objects.equals

java.util.objects.equals 是 java 标准库中的一个实用工具方法,用于比较两个对象是否相等。它在 java 7 中引入,旨在简化对象比较的代码,同时避免空指针异常(nullpointerexception)。这个方法非常实用,尤其是在处理可能为 null 的对象时。

  • 使用案例:
import java.util.arraylist;
import java.util.arrays;
import java.util.objects;

public class objectscomparison {

    public static void main(string[] args) {
        arraylist<string> list1 = new arraylist<>(arrays.aslist("apple", "banana", "cherry"));
        arraylist<string> list2 = new arraylist<>(arrays.aslist("apple", "banana", "cherry"));
        arraylist<string> list3 = new arraylist<>(arrays.aslist("apple", "cherry", "banana"));

        boolean isequal1 = objects.equals(list1, list2);
        boolean isequal2 = objects.equals(list1, list3);

        system.out.println("list1和list2是否相等: " + isequal1); // true
        system.out.println("list1和list3是否相等: " + isequal2); // false
    }

}
  • 执行结果:

在这里插入图片描述

3.2.1 实现原理

objects.equals 的实现逻辑非常简单,以下是它的源码:

在这里插入图片描述

  • 如果两个对象引用相同(a == b),直接返回 true
  • 如果第一个对象不为 null,调用 a.equals(b) 方法进行比较。
  • 如果两个对象都为 null,返回 true

四、总结

不管是什么职级的开发工程师,在java开发中,你都会使用到集合,集合比较是否相等是一个比较常见的方法,要弄清楚这个集合比较的基本规则,你才能更好的去实现需求。

以上就是java比较集合是否相等的技巧分享的详细内容,更多关于java比较集合相等的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com