集合-set系列集合

news2024/11/25 15:40:13

系列文章目录

1.集合-Collection-CSDN博客​​​​​​

2.集合-List集合-CSDN博客

3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客

4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客

5.集合-set系列集合-CSDN博客


文章目录

目录

系列文章目录

文章目录

前言

一 . 什么是set?

二 . HashSet 

三 . LikedHashSet

四 . TreeSet

总结


前言

大家好,今天给大家讲一下set系列集合的相关知识


一 . 什么是set?

在 Java 中,Set 是一种集合类型,它是一个不允许包含重复元素的集合。Set 接口继承自 Collection 接口,定义了一些用于操作和管理集合的方法。

继承体系:

Set 的特点如下:

  1. 不允许重复元素:Set 中的元素是唯一的,不会包含重复的元素。当向 Set 中添加重复元素时,添加操作会被忽略。

  2. 无序性:Set 中的元素没有固定的顺序,不会按照元素的插入顺序或者排序顺序进行存储。因此,不能通过索引来访问 Set 中的元素。

  3. 无索引: 没有带索引的方法,所以无法使用普通for循环遍历,也不能通过索引来获取元素

常见的 Set 实现类有 HashSet、LinkedHashSet 和 TreeSet。

  • HashSet:HashSet 使用哈希表来存储元素,具有较好的插入和查找性能。由于哈希表的特性,HashSet 中的元素是无序的。

  • LinkedHashSet:LinkedHashSet 在 HashSet 的基础上,使用链表维护元素的插入顺序,因此可以保持元素的插入顺序。

  • TreeSet:TreeSet 使用红黑树(一种自平衡的二叉查找树)来存储元素,并且可以保持元素的排序顺序。

Set 接口定义了一系列方法,如添加元素、删除元素、判断元素是否存在等。常见的方法有:

  • add(E e):向 Set 中添加元素。
  • remove(Object o):从 Set 中删除指定的元素。
  • contains(Object o):判断 Set 中是否包含指定的元素。
  • size():返回 Set 中元素的数量。
  • isEmpty():判断 Set 是否为空。

通过使用 Set,可以方便地管理和操作不允许包含重复元素的集合。


二 . HashSet 

HashSet 是 Java 中的一种 Set 接口的实现类,它使用哈希表来存储元素,具有以下特点:

  1. 不允许重复元素:HashSet 中的元素是唯一的,不会包含重复的元素。当向 HashSet 中添加重复元素时,添加操作会被忽略。

  2. 无序性:HashSet 中的元素没有固定的顺序,不会按照元素的插入顺序或者排序顺序进行存储。因此,不能通过索引来访问 HashSet 中的元素。

  3. 元素的判定:HashSet 使用元素的 equals() 方法和 hashCode() 方法来判断元素是否重复。因此,添加到 HashSet 中的元素必须正确实现 equals() 方法和 hashCode() 方法。

  4. 无索引: 没有带索引的方法,所以无法使用普通for循环遍历,也不能通过索引来获取元素

HashSet 在实际应用中常用于去重的操作,可以快速判断一个元素是否已经存在于集合中,并且可以高效地添加和删除元素。由于 HashSet 使用哈希表来存储元素,所以它的插入和查找操作的时间复杂度都是 O(1)。

数组+链表

 数组+链表+红黑树

 


三 . LikedHashSet

在LikedHashSet中,元素的存储是无序的,不允许有重复元素。它的底层实现是一个哈希表,通过哈希函数将元素映射到哈希表的位置上。当插入或删除元素时,LikedHashSet会调用哈希函数来确定元素的位置,并在该位置上进行操作。

LikedHashSet的优点是在插入、删除和查找元素时具有较高的效率。由于使用了哈希表,元素的插入和删除操作的平均时间复杂度是O(1),查找操作的平均时间复杂度也是O(1)。但是,由于哈希表的大小是有限的,当元素的数量较多时,可能会导致哈希冲突,影响操作的效率。

应用场景: 去重且存取有序 


四 . TreeSet

TreeSet是Java中的一个有序集合数据结构,它实现了SortedSet接口,并且使用红黑树(Red-Black Tree)作为底层数据结构来存储元素。

与HashSet和LinkedHashSet不同,TreeSet中的元素是有序的。它根据元素的自然顺序或者通过Comparator接口提供的排序规则来对元素进行排序。在TreeSet中,元素默认按照从小到大进行排序,或者可以通过构造函数指定一个Comparator来进行自定义排序。


总结

这篇博客主要讲解了set系列的集合的相关内容,大家多多支持,我们下一篇博客见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1053657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS defineProperty详解

defineProperty Object.defineProperty():方法会在对象上直接定义个新的属性,或者修改现有的属性,并返回此对象 let obj {} //与我们使用 obj.name zhangsna 效果一样 但是用defineProperty定义的属性无法改变 或者删除 Object.defineProperty(obj,n…

【面试经典150 | 数组】加油站

文章目录 写在前面Tag题目来源题目解读解题方法方法一:暴力枚举方法二:一次遍历 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些…

单元测试框架-Pytest(简单学习)

单元测试框架-Pytest Pytest是基于Python语言的单元测试框架,也是一个命令行的工具,比 unittest 测试框架更灵活。具有以下特点: 入门简单,易上手,官方文档丰富而且使用广泛,有大量的参数例子。 unittest…

2.索引操作

1. 创建索引 创建索引就等于创建数据库,ES使用put操作创建索引,我们创建一个students的索引,只需要发生put请求:http://127.0.0.1:9200/students 2. 查看索引 2.1 查看所有索引: 使用http://127.0.0.1:9200/_cat/ind…

抓包习讯云院校数据通过PHP解析导入数据库

前言 最近,打卡APP需要这个数据,通过抓包后发现这个数据是固定的,获取很简单,但是数据太多,手动导入不显示,于是分析了json格式后果断通过脚本完成 【推荐】 《【MQTT】Esp32数据上传采集:最…

搭建后台框架

一、引入依赖 项目的包层级关系如下 依赖引入 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&quo…

cloudCompare教程:三、点云保存格式、自带截图

如果你没有统计法线&#xff0c;保存的点云文件中也是没有法线的。 如下格式&#xff1a; 1 //X;Y;Z;Original_cloud_index;2;intensity;tree 2 1903 3 -2.96899939;43.87673187;0.12744403;1.000000;nan;8.000000;99.000000 4 -2.72843552;43.74015808;0.15977502;1.000000;…

S型速度曲线轨迹规划(已知速度和距离)

S型速度曲线规划的基础知识可以查看下面这篇博客&#xff1a; 带平滑功能的斜坡函数&#xff08;多段曲线控温纯S型曲线SCL源代码完整算法分析&#xff09;_RXXW_Dor的博客-CSDN博客PLC运动控制基础系列之梯形速度曲线&#xff0c;可以参看下面这篇博客&#xff1a;PLC运动控制…

2023-9-29 JZ33 二叉搜索树的后序遍历序列

题目链接&#xff1a;二叉搜索树的后序遍历序列 import java.util.*; public class Solution {int [] seq;public boolean VerifySquenceOfBST(int [] sequence) {if(sequence.length < 0) return false;this.seq sequence;return dfs(0, seq.length - 1);}public boolean …

在 Python 中列出虚拟环境

文章目录 在Python中列出虚拟环境使用lsvirtualenv命令使用Conda命令使用workon命令 总结 虚拟环境是一个独立的环境&#xff0c;我们可以在其中安装库、包、脚本和Python解释器。如果你的项目需要不同版本的库或Python解释器&#xff0c;你可以为每个项目创建单独的虚拟环境。…

51单片机数字电压表仿真设计_LCD显示(仿真+程序+原理图+PCB+设计报告+讲解)

51单片机数字电压表仿真设计_LCD显示&#xff08;仿真程序原理图PCB设计报告讲解&#xff09; 原理图&#xff1a;Altium Designer 仿真版本&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0006 51单片机数…

使用关键字abstract 声明抽象类-PHP8知识详解

抽象类只能作为父类使用&#xff0c;因为抽象类不能被实例化。抽象类使用关键字abstract 声明&#xff0c;具体的使用语法格式如下&#xff1a; abstract class 抽象类名称{ //抽象类的成员变量列表 abstract function 成员方法1(参数); //抽象类的成员方法 abstract functi…

UG\NX二次开发 用程序修改“用户默认设置”

文章作者:里海 来源网站:《里海NX二次开发3000例专栏》 简介 可以用程序修改“用户默认设置”吗?下面是用代码修改“用户默认设置->基本环境->用户界面->操作记录->操作记录语言”的例子。 效果 代码 #include <uf_defs.h> #include <NXOpen/NXExcept…

Kafka-Kerberos票据刷新问题

线上kafka使用了 kerberos 认证&#xff0c;每隔24小时&#xff0c;票据过期&#xff0c;无法自动续期&#xff0c;出现消息发送失败问题。 从日志可以发现会有如下报错&#xff1a; 2023-09-14 17:48:47,144 [kafka-kerberos-refresh-thread-kafka/hdp-1HADOOP.COM] [] WARN …

MNIST手写数字识别

MNIST是一个手写体数字的图片数据集&#xff0c;该数据集由美国国家标准与技术研究所&#xff08;National Institute of Standards and Technology (NIST)&#xff09;发起整理&#xff0c;其包含 60,000 张训练图像和 10,000 张测试图像&#xff0c;每张图片的尺寸为 28 x 28…

点亮一个LED+LED闪烁+LED流水灯——“51单片机”

各位CSDN的uu们好呀&#xff0c;这是小雅兰的最新专栏噢&#xff0c;最近小雅兰学习了51单片机的知识&#xff0c;所以就想迫不及待地分享出来呢&#xff01;&#xff01;&#xff01;下面&#xff0c;让我们进入51单片机的世界吧&#xff01;&#xff01;&#xff01; 点亮一个…

在线小说阅读系统

在线小说阅读系统&#xff1a; 功能实现 1.一级菜单&#xff1a;登录 注册 退出系统 2.二级菜单&#xff1a;查看小说列表 上传小说 下载小说 在线阅读 返回上级菜单 技术要点 1.面向对象思想 oop思想 2.TCP通信 &#xff1a;Socket通信&#xff08;这里用TCP&#xff0c;…

【C++】:类和对象(1)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关C中类和对象的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通…

Docker安装MS SQL Server并使用Navicat远程连接

思维导航 MS SQL Server简介 Microsoft SQL Server(简称SQL Server)是由微软公司开发的关系数据库管理系统,它是一个功能强大、性能卓越的企业级数据库平台,用于存储和处理大型数据集、支持高效查询和分析等操作。SQL Server 支持广泛的应用程序开发接口(API),包括 T-S…

vue ant 两个页面 调用同一个接口 想在 前端的一个 接口传 一个固定的值 ,另外一个不变 ,查询条件默认值加上自己要的就好啦

vue ant 两个页面 调用同一个接口 想在 前端的一个 接口传 一个固定的值 &#xff0c;另外一个不变 查询条件默认值加上自己要的就好啦