Java集合框架之Set集合简介

2023-11-12

和List集合一样,Set集合也是属于单列集合,同属于Collcetion集合体系下
在这里插入图片描述
List和Set都是单列集合,但是他们是存在区别的
List:有序,元素可重复的单列集合
Set:无序,元素不可重复的单列集合

Set和List集合一样属于接口,无法直接创建实例化对象,需要子类来创建;下面介绍两个两个常用的子类:

HashSet:散列集合,存放是无序的

		//通过HashSet创建Set的实例化对象
		Set<String> set = new HashSet<String>();

TreeSet:存放有序,不能存放null值,会报空指针异常

		//通过TreeSet创建Set的实例化对象
		Set<String> set = new TreeSet<String>();

上述是创建Set集合实例化对象的两种方法,既然是集合我们就可以对存放的数据通过泛型进行限制

对于Set集合元素是不能存放重复的,下面通过添加数据来验证(HashSet演示)

		//通过TreeSet创建Set的实例化对象
		Set<String> set = new HashSet<String>();
		//添加数据
		set.add("hello");
		set.add("java");
		set.add("world");
		//打印
		System.out.println(set);//打印结果:[java, world, hello]
		//添加相同的数据
		set.add("hello");
		//打印
		System.out.println(set);//打印结果:[java, world, hello]

通过上述两次打印结果,可以看到,对于set集合中的数据是不能重复出现的,因此添加第二个hello的时候就没能存放到集合中

那么HashSet又是如何保证数据的唯一性的呢?
当比较两个对象是否相同时,首先会比较对象的hashCode值,如果hashCode值相同再调用equals方法进行比较。如果equals比较返回true就判定两个对象相同。如果hashCode值不相同,就直接判定两个对象不相同,不会再调用equals方法

Set集合中也包含一些方法供我们使用
1.boolean contains(Object obj):判断是否包含指定的值

		//通过TreeSet创建Set的实例化对象
		Set<String> set = new HashSet<String>();
		//添加数据
		set.add("hello");
		set.add("java");
		set.add("world");
		//打印
		System.out.println(set.contains("java"));//打印结果:true

2.boolean isEmpty():判断集合是否为空;true表示为空,false表示不为空

		//通过TreeSet创建Set的实例化对象
		Set<String> set = new HashSet<String>();
		//添加数据
		set.add("hello");
		set.add("java");
		set.add("world");
		//打印
		System.out.println(set.isEmpty());//打印结果:false

3.boolean remove(Object obj):删除集合中指定的元素

		//通过TreeSet创建Set的实例化对象
		Set<String> set = new HashSet<String>();
		//添加数据
		set.add("hello");
		set.add("java");
		set.add("world");
		//删除元素
		set.remove("world");
		//打印
		System.out.println(set);//打印结果:[java, hello]

4.void clear():清空集合中所有的元素

		//通过TreeSet创建Set的实例化对象
		Set<String> set = new HashSet<String>();
		//添加数据
		set.add("hello");
		set.add("java");
		set.add("world");
		//清空所有元素
		set.clear();
		//打印
		System.out.println(set);//打印结果:[]

上述主要介绍了一下Set集合的特点,Set集合如何保证数据唯一性的以及Set集合中的一些方法

今天的分享就到这里了,如果有错误的地方欢迎大家来指点!大猿一直在进步

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java集合框架之Set集合简介 的相关文章

  • java.lang.NoClassDefFoundError:org.apache.batik.dom.svg.SVGDOMImplementation

    我在链接到我的 Android LibGDX 项目的 Apache Batik 库时遇到了奇怪的问题 但让我们从头开始 在 IntelliJ Idea 中我有一个项目 其中包含三个模块 Main Android 和 Desktop 我强调的
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • Linux Top查看指定进程的CPU状态

    查看top帮助信息 不管linux还是unix 大多数命令都是支持man命令来查看帮助信息的 语法是下面这样 进入到交互界面后 用法类似vi 然后按 q 可以退出 输入 再输入关键字 可以查询相关关键字 man top 帮助信息回显 TOP
  • 华为OD机试 - 食堂供餐 - 二分查找(Java 2023 B卷 考生抽中题)

    目录 一 题目描述 二 输入描述 三 输出描述 四 补充说明 五 解题思路 六 Java算法源码 七 效果展示 1 输入 2 输出 3 说明 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 一 题目描述 某公司员工食堂以盒饭的方式供餐
  • python 图像相减的不同方法

    对于图像相减采用如下方法进行结果对比 本案例中采用灰度图像 gray img jpg 如下 gray cur jpg如下 不同算法图像相减之后得结果 1 采用矩阵直接相减 diff gray cur gray pre 结果很不好 有很多噪点
  • wo 27s虚拟服务器,联通光猫wo-27s设置上网

    联通光猫wo 27s怎么设置上网呢 填写上网账号和密码那栏 要输入光猫的超级管理页面 http 192 168 1 1 CU html 输入管理员用户名和密码 CUAdmin 密码相同 也有不相同的 具体视设备参数 进入管理页面以后 点击基
  • -bash:findstr: command not found

    项目场景 在CentOS7 6 上部署公司的一个系统 问题描述 执行命令报错 keytool list keystore app jdk11Openj9 lib security cacerts storepass changeit fin
  • Centos7安装Gitlab

    安装GithLab 1 安装必要依赖 sudo yum install y curl policycoreutils python openssh server perl sudo systemctl enable sshd sudo sy
  • Sublime text 3 如何格式化HTML/css/js代码

    使用Sublime text 3 编写代码是一种享受 使用Sublime text 3 格式化HTML代码 需要安装插件 具体安装步骤如下 1 打开菜单 gt 首选项 gt 插件控制 输入 install package 2 等待程序进入插
  • DoS攻击

    原文 1 DoS攻击 DoS攻击 Denial of Service 拒绝服务攻击 通过消耗计算机的某种资源 例如计算资源 网络连接等 造成资源耗尽 导致服务端无法为合法用户提供服务或只能提供降级服务 在SDN网络的集中式架构中 控制器是天
  • 医学图像分割评判标准及程序代码

    文章目录 1 图像分割指标 2 两个问题 3 IOU和假阳性率 4 准确率 Accuracy 精确率 Precision 召回率 Recall 和F1 Measure 参考资源 1 https blog csdn net zichen zi
  • 关于获取项目在tomcat中的路径问题

    1 直接发请求 可以用下面的方式 ServletContext context ServletRequestAttributes RequestContextHolder getRequestAttributes getRequest ge
  • 如何安装管式土壤墒情监测仪?

    安装说明 在安装时 需选择地势相对较高且平坦的位置进行安装 这样即能防止雨水倒灌进设备内部从而引起设备短路或线路故障 还能保证监测数据的精准度 首先 我们先使用土钻竖直于地面进行打孔保证传感器放入 取出都比较顺畅 直到孔深与传感器所标识的安
  • 程序员如何培养领导力

    第一阶段 熟悉自己的业务 知道问题在哪里 怎样可以解决 领导者是给大家指方向的 你必须先知道要走哪个方向 才能带领别人 这是领导力的基础 第二阶段 培养说服能力 能说服他人 问题可以按照你说的方式解决 领导力的表现是 他人愿意服从你 这不能
  • 比较流行的编程语言

    流行的编程语言 1 C C语言诞生于1972年 可以称之为现代高级语言的鼻祖 由著名的贝尔实验室发明 C语言是人们追求结构化 模块化 高效率的 语言之花 在底层编程 比如嵌入式 病毒开发等应用 可以替代汇编语言来开发系统程序 在高层应用 也
  • MOS管应用之外接电源和电池供电的的双电源自动切换电路

    现在大部分电子产品都配有锂电池 在没有外接电源的时候 使用锂电池进行供电 当外接电源的时候 使用外部电源供电 同时对锂电池充电 因此要求电路必须具备能够根据是否接有外部电源 而自动选择相应供电电源的能力 常见的简单电源切换电路如图1所示 但
  • 16.echarts X轴像直尺一样设置刻度

    在做老师的项目的时候 老师让我们实现X轴的直尺刻度显示 网上查了查相关代码 大家都没有明确介绍 因此我在这里记录一下 自己的学习 先看实现效果 对echarts的xAxis yAxis这两个属性进行修改即可实现 xAxis 第一个 是原X轴
  • nodeMCU(ESP8266)和RC522的接线图

    文章目录 nodeMCU ESP8266 和RC522的接线图 参考文章 nodeMCU引脚图 nodeMCU 和 RC522接线图 示例代码 nodeMCU ESP8266 和RC522的接线图 参考文章 这篇应该是别人从国外论坛翻译过来
  • 腾讯翻译软件推荐

    相信大家学编程的时候 经常会需要进行官方文档的查阅 但是大部分的官方文档都是英文的 对于英文不是很好的朋友不是很友好 当然 如果英文较好的朋友最好尝试看英文 毕竟在写代码的时候翻译软件会把代码中的英文也翻译出来 下面我推荐一款腾讯翻译软件给
  • Web前端——HTML中的列表、表格、表单

    一 列表
  • 数据挖掘与数据分析的主要区别

    本文来自网易云社区 百科是这样定义数据挖掘和数据分析的 数据分析 是指用适当的统计分析方法对收集来的大量数据进行分析 提取有用信息和形成结论而对数据加以详细研究和概括总结的过程 这一过程也是质量管理体系的支持过程 在实用中 数据分析可帮助人
  • Java集合框架之Set集合简介

    和List集合一样 Set集合也是属于单列集合 同属于Collcetion集合体系下 List和Set都是单列集合 但是他们是存在区别的 List 有序 元素可重复的单列集合 Set 无序 元素不可重复的单列集合 Set和List集合一样属