IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Set集合 -> 正文阅读

[数据结构与算法]Set集合

Set接口

无序无下标元素不可重复
添加的顺序和遍历的顺序不一致
方法全部继承Collection的

接口使用:

1.添加删除数据
在这里插入图片描述
可以看到数组结果是无序的

2.遍历操作
在这里插入图片描述

set实现类

HashSet实现类(重要)

存储结构是哈希表(数组+链表+红黑树)
基于HashCode值计算出元素存放位置,当存入元素的哈希码相同时,会调用equals确认,如果为true则认为是重复的不能存了

案例1:
1.添加删除数据
在这里插入图片描述
可以看到,添加元素的顺序与遍历的顺序不一致
新建集合时,< >里面的内容表示数据类型为String,后面那一个<>可以写也可以不写(泛型的表示,避免了类型强转)

2.遍历操作,判断操作
在这里插入图片描述
案例2:(复杂点的集合)
HashSet存储过程:
现根据hashcode计算保存的位置,如果这个位置是空的,则直接保存,如果不为空则这个位置本身有元素,还要执行equals,如果equals为true(新的和旧的相等),则认为是重复,就添加不进来了,否则为false形成链表。

1.添加元素
在这里插入图片描述
说明:添加时person.add(p1),这样是添加不进来的,因为认为是重复的,他们的地址相同就是同一个;
但是通过new来添加时是可以添加进来的,是新new出来,不管原来是否已经添加过都可以再添加,重复的也可以,如果不想让相同的重复的元素添加进来,重写hashcode方法和equals方法,然后就不能添加进来了,认为是重复的。

2.删除元素

直接删p1是可以的,就是之前定义的对象。
在没有重写两个方法的时候,用new来删除之前定义的对象是删不掉的,在重写方法之后,判断就是之前定义的相同的对象,然后就可以删掉了。
在这里插入图片描述在这里插入图片描述
3.遍历
在这里插入图片描述
4.判断
在这里插入图片描述
在这里插入图片描述

TreeSet实现类

基于排序实现元素不重复
实现了SortedSet接口,对集合元素自动排序
元素对象的类型必须实现Comparable接口,指定排序规则
CompareTo方法确定是否为重复元素
存储结构:红黑树(二叉查找树)

TreeSet使用

案例1:
在这里插入图片描述
输出结果的序列一般是按照a-z排的
在这里插入图片描述

案例2:
1.添加元素

在这里插入图片描述
添加元素报错:Person不能转成java.long.comparable
在这里插入图片描述
原因:Treeset存储结构是二叉查找树,左边的节点都要比右边的节点要小,每添将进来的元素都要和根节点进行比较,比根节点小要添加在左边,比根节点大的放在右边。
此时我们往集合里添加三个person对象,但是没有比较的对象,还不知道怎么比,比年龄还是姓名,所以报了异常。此时元素要实现一个Comparable接口,写好比较规则
compareTo()方法返回值为0,则认为是重复的元素,添加不进来了
在这里插入图片描述
在这里插入图片描述
如果n1=0,则返回n2,比较年龄,否则返回n1,比较姓名。
先按姓名比,然后按年龄比,此时就能添加进去了
在这里插入图片描述
添加年龄不同的:
在这里插入图片描述
在这里插入图片描述
添加相同的:是添加不上的,认为是重复的
compareTo()方法返回值为0,则认为是重复的元素,添加不进来了

在这里插入图片描述
在这里插入图片描述
2.删除操作
在这里插入图片描述
这两种都可以删掉,第二种new出来的认为是p3相同的,重复的所以可以删掉,因为实现了comparable接口
在这里插入图片描述
3.遍历操作,判断操作
在这里插入图片描述
Comparator接口:
实现定制比较,是一个比较器
Comparable:可比较的

TreeSet案例

要求:使用TreeSet集合实现字符串按照长度进行排序(原来是按照拼音字母排序的),使用定制比较规则:Comparator接口实现定制比较
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 14:44:49  更:2021-07-10 14:46:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 4:52:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码