【java中的Set集合】HashSet、LinkedHashSet、TreeSet(最通俗易懂版!!)

目录

一、HashSet集合

1.HashSet集合的特点

2.HashSet常用方法

二、LinkedHashSet集合

LinkedHashSet集合的特点

三、TreeSet集合

1.TreeSet集合的特点

2.TreeSet的基本使用

四、HashSet、LinkedHashSet、TreeSet的使用场景

五、list和set集合的区别


一、HashSet集合

1.HashSet集合的特点

2.HashSet常用方法

①:add(Object o):向Set集合中添加元素,不允许添加重复数据。

②:size():返回Set集合中的元素个数

public class Test {public static void main(String[] args) {HashSet<String> set = new HashSet<String>(); //调用HashSet无参构造方法——>创建HashMap对象并给map全局变量。set.add("青城");set.add("博雅");set.add("青城1");set.add("青城1");System.out.println(set);System.out.println(set.size());}
}

 

注意:不会按照保存的顺序存储数据(顺序不定),遍历时不能保证下次结果和上次相同。且向HashSet集合中添加元素,HashSet add方法实质是map全局变量调用了put方法,将数据存到了key,因为HashMap的 key不允许,所以HashSet添加的元素也不允许重复。

③.remove(Object o): 删除Set集合中的obj对象,删除成功返回true,否则返回false。

④.isEmpty():如果Set不包含元素,则返回 true。

⑤.clear(): 移除此Set中的所有元素。

⑥.iterator():返回在此Set中的元素上进行迭代的迭代器。

public static void main(String[] args) {HashSet<String> set = new HashSet<String>();set.add("青城");set.add("博雅");Iterator<String> ite =set.iterator();while(ite.hasNext()){System.out.println(ite.next());}
}

 

⑦.contains(Object o):判断集合中是否包含obj元素。

public class Test {public static void main(String[] args) {HashSet<String> set = new HashSet<String>();set.add("青城");set.add("博雅");System.out.println(set.contains("青城"));}
}

 

⑧:加强for循环遍历Set集合:

public class Test {public static void main(String[] args) {HashSet<String> set = new HashSet<String>();set.add("青城");set.add("博雅");for (String name : set) {   //使用foreach进行遍历。System.out.println(name);}}
}

 

二、LinkedHashSet集合

LinkedHashSet集合的特点

三、TreeSet集合

1.TreeSet集合的特点

2.TreeSet的基本使用

①.插入是按字典序排序的

public class Test {public static void main(String[] args) {TreeSet ts=new TreeSet();ts.add("agg");ts.add("abcd");ts.add("ffas");Iterator it=ts.iterator();while(it.hasNext()) {System.out.println(it.next());}}
}

输出 : 按照字典序排序的方式进行排序

abcd

agg

ffas

②.如果插入的是自定义对象 需要让类实现 Comparable 接口并且必须要重写compareTo

class Person implements Comparable{String name;int age;Person(String name,int age){this.name=name;this.age=age;}@Overridepublic int compareTo(Object o) {Person p=(Person)o;//先对姓名字典序比较 如果相同 比较年龄if(this.name.compareTo(p.name)!=0) {return this.name.compareTo(p.name);}else{if(this.age>p.age) return 1;else if(this.age<p.age) return -1;}return 0;}}public class Test {public static void main(String args[]){TreeSet ts=new TreeSet();ts.add(new Person("agg",21));ts.add(new Person("abcd",12));ts.add(new Person("ffas",8));ts.add(new Person("agg",12));Iterator it=ts.iterator();while(it.hasNext()){Person p=(Person)it.next();System.out.println(p.name+":"+p.age);}}
}

输出

abcd:12

agg:12

agg:21

ffas:8

四、HashSet、LinkedHashSet、TreeSet的使用场景

        HashSet:HashSet的性能基本上比LinkedHashSet和TreeSet要好,特别是添加和查询,这也是用的最多的两个操作

        LinkedHashSet:LinkedHashSet的查询稍慢一些,但是他可以维持元素的添加顺序。所以只有要求当插入顺序和取出顺序一致的时候 才使用LinkedHashSet。

        TreeSet:只有在需要对元素进行排序时使用

五、list和set集合的区别

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

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

相关文章

网页接口导入postman进行接口请求

postman版本&#xff1a;v10.17.4 一、拷贝接口信息 网页打开开发者工具-networkk&#xff0c;在网页上请求一次接口&#xff0c;鼠标指在接口上&#xff0c;点击鼠标右键-copy-copy as cURL(bash) 二、导入postman 打开postman&#xff0c;点击import-Raw text&#xff0c;…

YOLOv5、YOLOv7 注意力机制改进SEAM、MultiSEAM、TripletAttention

用于学习记录 文章目录 前言一、SEAM、MultiSEAM1.1 models/common.py1.2 models/yolo.py1.3 models/SEAM.yaml1.4 models/MultiSEAM.yaml1.5 SEAM 训练结果图1.6 MultiSEAM 训练结果图二、TripletAttention2.1 models/common.py2.2 models/yolo.py2.3 yolov7/cfg/training/Tri…

Spring Boot Actuator的Env端点存在本地文件包含(LFI)漏洞CVE-2020-5421

文章目录 0.前言1.参考文档2.基础介绍3.漏洞利用原理3.解决方案1. 升级Spring Boot版本2. 限制端点的访问3. 禁用环境端点4. 不公开敏感的Actuator端点5. 开启安全审计 0.前言 背景&#xff1a; Spring Boot Actuator的Env端点存在本地文件包含(LFI)漏洞CVE-2020-5421。被扫描到…

【C51基础实验 LED闪烁】

51单片机项目基础篇 LED闪烁1、硬件电路设计和原理分析2、软件设计2.1、功能实现&#xff1a;LED闪烁2.2、通过 KEIL 软件自带仿真查看延时时间 4、编译结果5、结束语 LED闪烁 前言&#xff1a; 前一篇学会了点亮一颗LED以及驱动原理&#xff0c;那么这篇紧接着就来解锁LED的新…

【业务功能篇90】微服务-springcloud-检索服务-ElasticSearch实战运用-DSL语句

商城检索服务 1.检索页面的搭建 商品检索页面我们放在search服务中处理&#xff0c;首页我们需要在mall-search服务中支持Thymeleaf。添加对应的依赖 <!-- 添加Thymeleaf的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifa…

(笔记二)利用opencv调用鼠标事件在图像上绘制图形

目录 &#xff08;1&#xff09;查看cv2所支持的鼠标事件&#xff08;2&#xff09;通过鼠标事件在图像上做标记&#xff08;3&#xff09;高级操作&#xff1a;通过移动鼠标在图像绘制图形、曲线 该功能主要创建一个鼠标事件发生时执行的回调函数。鼠标事件可以是任何与鼠标有…

根据身高重建队列【贪心算法】

根据身高重建队列 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返…

SQL注入漏洞复现(CVE-2017-8917)

文章目录 搭建环境启动环境漏洞复现报错注入使用sqlmap 前提条件&#xff1a; 1.安装docker docker pull medicean/vulapps:j_joomla_22.安装docker-compose docker run -d -p 8000:80 medicean/vulapps:j_joomla_23.下载vulhub Docker Compose是 docker 提供的一个命令行工具&…

Mysql中九种索引失效场景分析

表数据&#xff1a; 索引情况&#xff1a; 其中a是主键&#xff0c;对应主键索引&#xff0c;bcd三个字段组成联合索引&#xff0c;e字段为一个索引 情况一&#xff1a;不符合最左匹配原则 去掉b1的条件后就不符合最左匹配原则了&#xff0c;导致索引失效 情况二&#xff…

go学习-指针 标识符

指针&#xff0c;以及标识符 1.指针 &#xff08;1&#xff09;.基本介绍 1&#xff09;基本数据类型&#xff0c;变量存的值&#xff0c;也叫值类型 2&#xff09;获取变量的地址用&&#xff0c;比如 var num int ,获取num的地址&#xff1a;&num 3)指针类型&…

小程序隐私保护授权处理方式之弹窗组件

欢迎点击关注-前端面试进阶指南&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的&#x1fa9c; 小程序隐私保护授权弹窗组件 调用wx.getUserProfile进行授权时&#xff0c;返回错误信息&#xff1a;{errMsg: “getUserProfile:fail api scope is…

智慧排水监测系统:创新监测技术保障排水系统安全运行

城市排水系统作为城市基础设施的重要组成部分&#xff0c;其安全运行直接关系到环境卫生、居民生活和城市发展。为了确保排水系统的顺畅运行&#xff0c;传统的监测手段已经不能满足日益复杂的城市排水需求&#xff0c;物联网技术的快速发展为排水系统的监测带来了巨大的便利&a…

科普宣传片制作思路

科普宣传片可以针对不同的科学领域和主题&#xff0c;包括自然科学、生命科学、物理学、化学、天文学、地球科学、环境保护等&#xff0c;提供具体的案例、实验和研究成果&#xff0c;帮助观众更好地理解和应用科学知识。科普宣传片的制作思路可以根据具体的科普主题和目标观众…

基于ssm vue智慧城市实验室主页系统源码和论文

基于ssm vue智慧城市实验室主页系统源码和论文059 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方…

基于协同滤波推荐算法的图书管理系统

目录 一、项目概述 二、技术框架 三、功能设计 四、数据库设计 五、项目截图 六、技术文档 一、项目概述 Hi&#xff0c;大家好&#xff0c;今天分享的项目是《基于协同滤波推荐算法的图书管理系统》&#xff0c;对用户登录注册、图书推荐、图书管理、用户信息进行管理&…

Vue3响应式原理 私

响应式的本质&#xff1a;当数据变化后会自动执行某个函数映射到组件&#xff0c;自动触发组件的重新渲染。 响应式的实现方式就是劫持数据&#xff0c;Vue3的reactive就是通过Proxy劫持数据&#xff0c;由于劫持的是整个对象&#xff0c;所以可以检测到任何对象的修改&#xf…

版本控制 Git工具的使用

版本控制的概念&#xff1a; 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理多人协同开发…

C语言每日一练------(Day3)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今天练习题的关键字&#xff1a; 尼科彻斯定理 等差数列 &#x1f493;博主csdn个人主页&#xff1a…

2023_Spark_实验一:Windows中基础环境安装

Ⅰ、WINDOWS中安装JDK1.8 一、下载安装包 链接&#xff1a;百度网盘 请输入提取码 所在文件夹&#xff1a;根目录或者大数据必备工具--》开发工具(前端后端)--》后端 下载文件名称&#xff1a;jdk-8u191-windows-x64.exe 二、安装JDK 1.现在转到下载的exe文件可用的文件夹&…

【Vue3+Ts】项目启动准备和配置项目代码规范和css样式的重置

项目启动准备 创建项目&#xff08; 使用Vite 构建工具创建项目模板&#xff09;目录介绍插件安装创建别名编译说明项目配置配置icon和标题配置项目别名配置ts.config.json检测vscode的插件是否配置 配置项目代码规范集成editorconfig配置prettier工具库ESLint检测配置 CSS样式…