zoukankan      html  css  js  c++  java
  • 集合Set

    1.基本概述

    • Set接口是Collection的子接口,set接口没有提供额外的方法。但是比Collection接口更加严格了。

    2.特点

    1. Set 集合不允许包含相同的元素,即元素唯一。
    2. Set集合支持的遍历方式和Collection集合一样:foreach和Iterator。
    3. Set的常用实现类有:HashSet、TreeSet、LinkedHashSet。

    3.HashSet

    • HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。

    • 特点

      1. 无序:

        • 不是按照添加顺序展示
        • hash表内的顺序进行展示
      2. 唯一

        • 数据不能重复
      3. 注意:

        • 存储自定义类型数据 必须 重写 hashCode() equals() 才能保证 无序唯一

        • 存储自定义类型数据 有自定义属性 那么属性也需要重写 hashCode() equals() 才能保证 无序唯一

    • HashSet 集合判断两个元素相等的标准:

      • 两个对象通过 hashCode() 方法比较相等,
      • 且两个对象的 equals() 方法返回值也相等。
      • 因此,存储到HashSet的元素要重写hashCode和equals方法。

    4.LinekdHashSet

    • LinkedHashSet是HashSet的子类,它在HashSet的基础上,在结点中增加两个属性before和after维护了结点的前后添加顺序。

    • 是链表和哈希表组合的一个数据存储结构。

    • LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。

    • 特点

      1. 有序

        • 添加顺序
          1. after:后一个
          2. before:前一个
      2. 唯一

        • 数据不重复
      3. 注意

        • 存储自定义类型数据 有自定义属性 那么属性也需要重写 hashCode() equals() 才能保证 无序唯一
        • LinekdHashSet 有序:底层有对象的前一个值和后一个值的地址引用

    5.TreeSet

    • 底层结构:

      • 里面维护了一个TreeMap,都是基于红黑树实现的。
    • 特点

      1. 有序

        • 自然顺序(从小到大)
      2. 唯一

        • 数据不能重复
        • 根据比较规则确定重复的条件
          • 比如:年龄比较 年龄一致对象重复
    • 如何实现去重的?如何排序?

      • 如果TreeSet中的元素要实现元素唯一和排序,那么这些元素就必须是可以进行比较的,如何保证元素可比较呢?要么元素本身实现Comparable接口,从而实现可比较;要么给TreeSet容器传入一个实现了Comparator接口的比较器,使其可以对存入的元素进行比
    • 比较规则(部分例子)

      • Java提供的核心类很多都实现了Comparable接口比如常见的String类,包装类,日期类等
      • BigDecimal、BigInteger 以及所有的数值型对应的包装类:按它们对应的数值大小进行比较
      • Character:按字符的 unicode值来进行比较
      • Boolean:true 对应的包装类实例大于 false 对应的包装类实例
      • String:从第一个字符开始,比较每一个字符,如果字符都相同再比较长度。
      • Date、Time:比较毫秒值,后边的时间、日期比前面的时间、日期大
    作者:Ya
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    LeetCode-239 Sliding Window Maximum
    shop--10.商品--商品添加(前端)及问题的解决
    shop--10.商品--添加操作--状态类、枚举类等
    shop--10.商品--商品添加(后端)
    shop--9.商品类别--批量操作--删除类别(前端)
    shop--9.商品类别--批量操作--删除类别(后端)
    shop--9.商品类别--批量操作--增加类别(前端)
    shop--9.商品类别--批量操作--增加类别(后端)
    shop--9.商品类别--批量操作--状态类、枚举类等
    shop--9.商品类别--列表展示
  • 原文地址:https://www.cnblogs.com/1463490Ya/p/15526821.html
Copyright © 2011-2022 走看看