开发者

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

目录
  • 一、集合相等的定义
    • 1.1 集合相等的基本概念
    • 1.2 不同集合类型的相等性特点
  • 二、Java中比较集合相等的快速方法
    • 2.1 使用equals()方法
  • 三、值得推荐的写法和三方库
    • 3.1 推荐使用库 Hutool
    • 3.2 不用三方库的推荐写法 Objects.equals
      • 3.2.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);
       javascript     System.out.println("list1和list3是否相等: " + isEqual2);
        }
        
    }
    

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

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

    • 对于Set,比较元素内容,忽略顺序
    import java.util.Hashttp://www.devze.comhSet;
    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));
        }
    
    }
    

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

    上面执行的结果不难看出,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);
    
            // 输出结果
           http://www.devze.com System.out.println("map1和map2是否相等: " + map1.equals(map2));
            System.out.println("map2和map3是否相等: " + map3.equals(map2));
        }
    
    }
    

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

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

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

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

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

    实际有很多第三方库都实现了集合的比较,例如Apache Commons Collections(这个有的版本List比较是不区分顺序的,实际操作要注意)、Google Guava、和Hutool

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

    3.1 推荐使用库 Hutool

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

    • 依赖引入
    <dehttp://www.devze.compendency>
        <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
        }
    
    }
    
    • 执行结果:

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

    3.2.1 实现原理

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

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

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

    四、总结

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

    以上就是Java比较集合是否相等的技巧分享的详细内容,更多关于Java比较集合相等的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜