Set 特点

Set 集合无序,不允许有重复元素。Set 集合通过存入对象的 equals 方法来保证集合中没有重复元素

HashSet

  • HashSet 是 Set 的子类,因此也没有重复元素
  • 底层使用哈希算法保证没有重复元素
  • 存储对象时,先调用对象的 hashCode() 方法计算一个哈希值,在集合中查找是否有哈希值相同的对象
    如果没有哈希值相同的对象,直接存入。
    如果有哈希值相同的对象,则和哈希值相同的对象进行 equals() 方法比较。equals() 方法比较结果相同则不存,不同就存入。
  • 往 HashSet 集合里存储的对象必须正确重写 hashCode 和 equals 方法

TreeSet

  • TreeSet 集合通过二叉树算法保证无重复元素,并对元素进行排序
  • 在使用 TreeSet 时必须指定比较的算法,指定的方式有两种:
    自然顺序:将要存储的类实现 Comparable 接口,重写 compareTo 方法,在方法中指定算法
    比较器顺序:在创建 TreeSet 时,传入一个比较器 Comparator,在比较器的 compare 方法中指定算法
Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
    |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
            HashSet 是如何保证元素唯一性的呢?
            是通过元素的两个方法,hashCode 和 equals 来完成。
            如果元素的 hashCode 值相同,才会判断 equals 是否为 true。
            如果元素的 hashcode 值不同,不会调用 equals。

            <code>注意</code>对于判断元素是否存在,以及删除等操作,依赖的方法是元素的 hashcode 和 equals 方法。
            
    |--TreeSet:可以对 Set 集合中的元素进行排序。
                底层数据结构是二叉树。
                保证元素唯一性的依据:
                compareTo 方法 return 0.

                TreeSet 排序的第一种方式:让元素自身具备比较性。
                元素需要实现 Comparable 接口,覆盖 compareTo 方法。
                也种方式也成为元素的自然顺序,或者叫做默认顺序。

                TreeSet 的第二种排序方式。
                当元素自身不具备比较性时,或者具备的比较性不是所需要的。
                这时就需要让集合自身具备比较性。
                在集合初始化时,就有了比较方式。

本文作者:
文章标签:Java
文章标题:【Java 基础篇】Set 接口
本文地址:https://www.ducky.vip/archives/50.html
版权说明:若无注明,本文皆 iDuckie's Blog 原创,转载请保留文章出处。
最后修改:2024 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏