Java中的Set集合

news2024/10/3 2:16:06

Set

不能存储重复元素,元素无序(指的是不按照添加的顺序,List集合是按照添加顺序存储的)

hashSet

注:源码底层是hashMap实现的,因为hashMap是双列的,其中键是不能重复的,而hashSet是单列集合,所以就将键单独运用,实现了我们的hashSet

add方法

:hashset中添加元素时,使用的时map中的put方法,键是元素,而值则是一个常量,是一个object对象,如下:

hashSet添加元素时,如何判断元素是否已经存在(也就是判断hashMap的键是如何判断重复的)

add添加元素时,会先根据内容对象调用hashCode()方法计算出一个hash值(int类型),用计算出的哈希值作为标准来比较元素是否重复,效率高。但是,只用hash值比较是不安全的, 因为有些元素虽然内容不同,但是它们根据hashcode方法 (元素所属的类若重写了hashcode方法,则用重写的hashcode方法,若没有则使用object类的hashcode方法) 计算出的hash值是相同的(例“通话”与“种地”),为了避免,这时会调用equals方法对每个字符进行比较,只有hash值和内容都相同时,我们才会认定这两个元素重复,这时add方法就不会将其添加进set集合中

注:元素所属的类若重写了hashcode方法,则用重写的hashcode方法,若没有则使用object类的hashcode方法,object类中的hashcode()方法计算的hash值是由内存地址决定的,比较得是地址,而不是内容,所以我们如果要用集合对某个类的实例进行存储时,我们需要重写这个类的hashcode方法,通过内容计算hash值,这样set集合添加这个类的对象时,比较的就是内容而不是像object一样比较地址了,(举例:两个对象内容都相同,要存入set集合中,按道理它们是重复的,不能两个都添加,但是由于这个类没有重写hashcode方法,导致计算出的hash值不同,set集合add时就会把两个都添加进去)

注:我们自己定义的类中,重写hashcode方法时,idea会可以自动帮我们生成方法,且都是根据内容计算hash值,十分滴好用

TreeSet

元素不重复,且可以对元素进行指定方式的排序(是有序的)

存储的对象必须要实现Comparable接口

底层存储结构是二叉树(红黑树)

存储我们自定义的类对象时,类必须要实现comparable接口,重写compareTo方法。

如果对comparable接口不了解的友友,可以看下这篇哦~
https://blog.csdn.net/weixin_52394141/article/details/128907502

遍历方式

1.增强for循环

2.迭代器

Iterator类

Set集合总结:在java中可以存储一些单列不重复的元素,且需要排序时。

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

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

相关文章

使用f-string格式化构建字符串

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 字符串的格式化输出(f-string) print(f字符串{变量}字符串) [太阳]选择题 对于以下python代码最后输出的结果是? name "小明" print("【显示】f输出…

全新视角!带你一文读懂ChatGPT!

最了解你的人不是你的朋友,而是你的敌人。 ——《东邪西毒》 目录 什么是ChatGPT? ChatGPT为什么会突然爆红网络? ChatGPT能帮助我们做什么? 获取源码?私信?关注?点赞?收藏&…

记录--千万别让 console.log 上生产!用 Performance 和 Memory 告诉你为什么

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 很多前端都喜欢用 console.log 调试,先不谈调试效率怎么样,首先 console.log 有个致命的问题:会导致内存泄漏。 为什么这么说呢? 用 Performance 和 Mem…

【信管11.4】合同及合同管理过程(二)

合同及合同管理过程(二)合同管理过程不属于项目管理过程中的知识域,所以它也不是 PMP 中的内容。其实截止到这里,整个 PMP 中的相关知识你已经学完了。如果抛开我们第一大章信息化和信息管理相关的内容,你就可以直接去…

Spring Boot(五十九):Sa-Token-Quick-Login插件快速登录认证

1 Sa-Token-Quick-Login解决的问题 Sa-Token-Quick-Login 可以为一个系统快速的、零代码 注入一个登录页面 试想一下,假如我们开发了一个非常简单的小系统,比如说:服务器性能监控页面, 我们将它部署在服务器上,通过访…

Docker不做虚拟化内核,对.NET有什么影响?

引子前两天刷抖音,看见了这样一个问题。问题:容器化不做虚拟内核,会有什么弊端?Java很多方法会跟CPU的核数有关,这个时候调用系统函数,读到的是宿主机信息,而不是我们限制资源的大小。思考&…

FoveaBox原理与代码解析

paper:FoveaBox: Beyond Anchor-based Object Detectorcode:https://github.com/taokong/FoveaBox背景基于anchor的检测模型需要仔细设计anchor,常用方法之一是根据特定数据集的统计结果确定anchor的number、scale、ratio等,但这种…

elasticsearch8.3.2搭建部署

Elasticsearch8.3.2搭建部署详细步骤 0.过往文章 ES-6文章: Elasticsearch6.6.0部署、原理和使用介绍: https://blog.csdn.net/wt334502157/article/details/119515730 ES-7文章: Elasticsearch7.6.1部署、原理和使用介绍: https://blog.csdn.net/wt…

堆排序

章节目录:一、相关概述1.1 基本介绍1.2 排序思想二、基本应用2.1 步骤说明2.2 代码示例三、结束语一、相关概述 1.1 基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序。它的最坏最好平均时间复杂度均为 O(nlogn)&#x…

(深度学习快速入门)第五章第二节:GAN变体

文章目录一:CycleGAN(1)概述(2)双判别器(3)损失函数二:StyleGAN(1)解耦表征学习(2)概述三:DCGAN一:CycleGAN …

4.5.8 Set接口与HashSet

文章目录1.概述2.Set集合的特点3.常用方法4.HashSet4.1 概述4.2 练习: Set相关测试一4.3 练习: Set相关测试二1.概述 Set是一个不包含重复数据的CollectionSet集合中的数据是无序的(因为Set集合没有下标)Set集合中的元素不可以重复 – 常用来给数据去重 2.Set集合的特点 数据…

排序算法学习

文章目录前言一、直接插入排序算法二、折半插入排序算法三、2路插入排序算法四、快速排序算法学习前言 算法是道路生涯的一个巨大阻碍。今日前来解决这其中之一:有关的排序算法,进行实现以及性能分析。 一、直接插入排序算法 插入排序算法实现主要思想…

Kubernetes_从Linux的cgroup配置到Kubernetes中的cgroup配置

系列文章目录 文章目录系列文章目录前言一、Linux层面的cgroup二、Kubernetes层面的cgroup driver2.1 kubelet和docker的Cgroup Driver不同导致kubelet开启失败2.1.1 命令2.1.2 演示总结前言 一、Linux层面的cgroup cgroup是控制组,用来控制进程对资源的分配&…

Cesium-数字仿真-你总要了解

Cesium(专注于时空数据的实时可视化) cesium是一款三维地球开源框架(可以多平台、跨平台使用)cesium隶属于美国AGI公司(Analytical Graphics Incorporation),美国通用公司宇航部的工程师创始开源 周边产…

微信小程序的优化方案之主包与分包的研究

什么是分包? 某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。 在构建小程序分包项目时,构建会输出一个或多个分包。每个使用分包小程序必定含有一个主包。所谓的…

错误代码0xc0000001要怎么解决?如何修复错误

出现错误代码0xc0000001这个要怎么解决?其实这个的蓝屏问题还是非常的简单的,有多种方法可以实现 解决方法一 1、首先使用电脑系统自带的修复功能,首先长按开机键强制电脑关机。 注:如果有重要的资料请先提前备份好,…

【C++】C++11 ~ 包装器解析

🌈欢迎来到C专栏~~包装器解析 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&a…

Java 内存结构解密

程序计数器 物理上被称为寄存器,存取速度很快。 作用 记住下一条jvm指令的执行地址。 特点 线程私有,和线程一块出生。 不存在内存溢出。 虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈。 每个栈由多个栈帧组成,…

C/C++ 中的宏 (macros) 与宏展开的可视化显示

C/C 中的宏 (macros) 与宏展开的可视化显示1. Replacing text macros (替换文本宏) https://en.cppreference.com/w/cpp/preprocessor/replace https://www.codecademy.com/resources/docs/cpp/macros A macro is a label defined in the source code that is replaced by it…

dll修复工具哪个比较好?修复工具介绍

DLL(动态链接库)是Windows操作系统中非常重要的一部分,它们存储了各种软件应用程序所需的公共代码和数据。然而,随着时间的推移,电脑上的DLL文件可能会因为各种原因而损坏或丢失,导致系统出现错误。因此&am…