Java集合框架 —— Set

 2023-01-31
原文作者:蒋先森 原文地址:https://jlj98.top/

在 Java 集合中,有一种集合框架叫 Set,应该很多人在日常开发中用到它。
先了解下 Set 的一些特性,然后看下源码:

  • 不重复存储元素
  • 元素排列无序

因为其是一个抽象的接口,所以不能直接实例化一个 set 对象。(Set s = new Set() 错误 )。该接口主要继承于Collections接口,所以具有Collection的一些常见的方法。

源码分析

    //Set是无序的,不是按照插入的顺序排列的,不允许重复
    Set<String> set = new HashSet<>();
    set.add("a");
    set.add("c");
    set.add("b");
    set.add("a");
    System.out.println(set);

关于 HashSet,如果看下源码,就可以知道,其实实际使用的是 HashMap。而如果使用的是 TreeSet,通过源码,可以知道实际使用的是 TreeMap。

202212301148074931.png

202212301148089392.png

如何判断元素是否重复

HashSet 使用 hashCode 和 equals 方法。
注意:HashSet集合在判断元素是否相同先判断hashCode方法,如果相同才会判断equals。如果不相同,是不会调用equals方法的。

如果看源码,我们可以知道 HashSet 的 add() 方法,实际上调用的是 HashMap 的 put 方法。

202212301148099923.png

通过我之前的一篇文章 Java集合框架 —— HashMap 中,可以了解 HashMap 的 put 方法的源码分析,这就符合上面的注意点了。