• J-18 集合对象


    SET接口

    SET接口
    HashSet类
    LinkedHashSet类
    TreeSet类

    SET接口

    一、Set接口概述

    一个不包含重复元素的 collection。无序唯一

    二、Set案例

    存储字符串并遍历
    存储自定义对象并遍历

    HashSet类

    一、HashSet类概述

    底层数据结构是哈希表。
    不保证 set 的迭代顺序,特别是它不保证该顺序恒久不变。

    二、HashSet如何保证元素唯一性

    • 底层数据结构是哈希表(元素是链表的数组),哈希表依赖于哈希值存储
    • 通过查看add方法的源码,add功能底层依赖两个方法:
      int hashCode()
      boolean equals(Object obj)
      步骤:
      ① 比较哈希值;
      ② 若相同,比较地址值或equals();
      ③ 不同就添加到集合中。

    三、注意:

    HashSet集合,底层是哈希表结构。而哈希表结构底层依赖hashCode()和equals()方法。
    如果你认为对象的成员变量相同即为同一个对象的话,应该重写这两个方法。
    如何重写?系统生成。

    LinkedHashSet类

    LinkedHashSet类概述

    底层数据结构由哈希表和链表组成。
    元素有序唯一;
    链表保证元素有序(存储和取出一致);
    哈希表保证元素唯一

    TreeSet类

    一、TreeSet类概述

    底层数据结构是红黑二叉树结构(一种自平衡的二叉树)。
    使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

    • TreeSet特点:排序、唯一。

    • 能够对元素按照某种规则进行排序。

    • 排序方式:
      ① 自然排序 Comparable
      比较依赖于compareTo()方法,这个方法定义在Comparable里面。
      ② 比较器排序 Comparator

    二、TreeSet是如何保证元素的排序和唯一性的

    底层数据结构是红黑树(红黑树是一种自平衡的二叉树)

    • 存储方法:
      第一个元素存储时作为根节点存储,
      从第二个元素开始从根节点开始比较:
      ① 大 -- 右孩子
      ② 小 -- 左孩子
      ③ 相等 -- 不存储(保证唯一性)

    • 取出方法:
      从根节点开始,按照左中右的原则依次取出元素。

    三、注意

    使用TreeSet进行元素排序,需要实现Comparable接口,实现方式根据排序条件。

  • 相关阅读:
    LeetCode 40. Combination Sum II
    LeetCode 39. Combination Sum
    #Python学习#python虚拟环境——virtualenv
    #阿里云#云服务器部署Django(基础篇)
    驱动调试之打印
    Linux内核源码阅读记录一之分析存储在不同段中的函数调用过程
    uevent机制
    字符设备的另一种写法
    DM9000C网卡驱动程序编写与测试
    网卡驱动程序框架以及虚拟网卡驱动程序的实现
  • 原文地址:https://www.cnblogs.com/android-lyz/p/5108661.html
Copyright © 2020-2023  润新知