深入解析Java中Set接口

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在Java中,数据结构是非常重要的一部分,而Set接口作为Java集合框架中的一部分,具有处理数据的独特能力。Set接口提供了无序、不重复的集合,可以存储任何类型的对象。

摘要

  本文将介绍Java集合框架中Set接口的概念、原理、应用场景、优缺点以及实现代码。同时,本文将为读者提供一些基本的测试用例和总结。

Set接口

简介

  Set接口是Java集合框架中的一部分,它扩展Collection接口,提供了一种无序、不重复的集合。也就是说,在Set中,所有元素都是唯一的,不存在重复。Set接口中的元素是没有顺序的,因此不能根据索引位置访问元素。

  Set接口提供了多种实现,包括HashSet、TreeSet和LinkedHashSet。HashSet基于哈希表实现,可以快速访问元素。TreeSet基于红黑树实现,可以按顺序访问元素。LinkedHashSet则是HashSet的子类,使用一个链表维护元素的插入顺序。

源代码解析

  Set是Java中的一个接口,继承自Collection接口,表示无序且不允许重复元素的集合。Set接口中的元素不按特定顺序排列,只要保证元素不重复即可。

  下面是Set接口的源代码解析:

public interface Set<E> extends Collection<E> {// Query Operationsint size();                    //获取此集合中的元素数量。boolean isEmpty();             //如果此集合不包含任何元素,则返回true。boolean contains(Object o);    //如果此集合包含指定的元素,则返回true。Iterator<E> iterator();        //返回在此集合中元素上进行迭代的迭代器。Object[] toArray();            //将此集合中的元素作为数组返回。// Modification Operationsboolean add(E e);              //将指定的元素添加到此集合中(可选操作)。boolean remove(Object o);      //从此集合中删除指定的单个元素(如果存在)(可选操作)。boolean addAll(Collection<? extends E> c);  //将指定集合中的所有元素添加到此集合中(可选操作)。boolean retainAll(Collection<?> c);         //仅保留此集合中包含在指定集合中的元素(可选操作)。boolean removeAll(Collection<?> c);         //删除此集合中包含在指定集合中的所有元素(可选操作)。void clear();                  //从此集合中删除所有元素(可选操作)。// Bulk Operationsboolean containsAll(Collection<?> c);       //如果此集合包含指定集合中的所有元素,则返回true。default boolean removeIf(Predicate<? super E> filter)  //删除符合给定谓词的此集合中的所有元素(可选操作)。// Comparison and hashingboolean equals(Object o);                   //比较指定对象与此集合是否相等。int hashCode();                              //返回此集合的哈希码值。 (如果两个集合相等,则它们的哈希码也必须相等)。
}

  Set接口是Java集合框架中的一部分,它扩展了Collection接口。Set接口中定义了一些常用的方法,比如size()获取集合中元素的数量,isEmpty()判断集合是否为空,contains()判断集合是否包含某个元素,iterator()返回在此集合中元素上进行迭代的迭代器等等。此外,还定义了一些修改操作,如add()添加元素,remove()删除元素等等,特别需要注意的是这些操作都是可选的。

  同时还定义了许多其他操作,如containsAll()判断集合是否包含某个集合中的所有元素,equals()比较两个集合是否相等,hashCode()获取集合的哈希码值等等。这些操作都是非常常用的,在开发中是需要熟练掌握的。

如下是部分源码截图:

在这里插入图片描述

应用场景案例

Set接口的使用非常广泛。以下是一些常见的应用场景:

  • 去重。Set接口可以自动过滤重复元素,因此用于去重非常方便。
  • 集合运算。Set接口提供了多种集合运算,包括求并集、交集和差集等。
  • 缓存。Set可以用于缓存某些数据,例如缓存最近访问的URL。

下面是一个基于HashSet实现的简单例子:

package com.example.javase.collection;import java.util.HashSet;
import java.util.Set;/*** @Author ms* @Date 2023-10-21 20:51*/
public class SetTest {public static void main(String[] args) {Set<String> set = new HashSet<String>();set.add("apple");set.add("banana");set.add("orange");set.add("apple"); // 重复元素不会被添加System.out.println("Set size: " + set.size());for (String element : set) {System.out.println(element);}}
}

运行结果如下:

Set size: 3
orange
banana
apple

  从结果可以看出,Set中只保留了唯一的元素,重复元素被自动过滤掉。同时,元素的顺序是无序的。

测试结果如下:

在这里插入图片描述

优缺点分析

Set接口的优点包括:

  • 去重。Set接口可以自动过滤重复元素,便于处理数据。
  • 集合运算。Set接口提供了多种集合运算,方便处理数据。
  • 不需要保存顺序。Set中的元素顺序是无序的,对于某些应用场景非常有利。

缺点包括:

  • 元素不可重复。Set中不能保存重复的元素,这可能会导致某些问题,例如计数、排名等操作。

类代码方法介绍

  • add(E e):将指定的元素添加到Set中。如果该元素是Set中的重复元素,则返回false。
  • remove(Object o):从Set中删除指定的元素。
  • contains(Object o):如果Set包含指定的元素,则返回true。
  • isEmpty():如果Set中没有任何元素,则返回true。
  • size():返回Set中的元素数。

测试用例

以下是一些基本的测试用例:

import java.util.HashSet;
import java.util.Set;public class SetTest {public static void main(String[] args) {Set<String> set = new HashSet<String>();set.add("apple");set.add("banana");set.add("orange");set.add("apple");System.out.println(set.contains("apple")); // trueSystem.out.println(set.contains("pear")); // falseSystem.out.println(set.size()); // 3set.remove("apple");System.out.println(set.size()); // 2System.out.println(set.isEmpty()); // false}
}

代码执行结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述

代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

  这段Java代码演示了HashSet的基本用法,创建了一个String类型的HashSet set,并向其中添加了4个元素。由于HashSet不允许重复元素,因此只有3个元素加入成功,第二个"apple"会被自动过滤掉。

运行结果为:

true
false
3
2
false

  说明set中包含"apple",不包含"pear",set的大小为3,删除了一个"apple"后set的大小为2,set不为空。

全文小结

  本文介绍了Java集合框架中的Set接口,包括概念、原理、应用场景、优缺点及实现代码。同时,我们还提供了一些基本的测试用例,帮助读者更好地理解Set接口的使用。

总结

  本文讲解了Java集合框架中的Set接口,通过对Set接口的概念、原理、应用场景、优缺点以及实现代码进行分析和说明,使读者对Set接口的使用有了更深刻的了解。

  Set接口是Java中集合框架的重要组成部分,它提供了一种无序、不可重复的集合,非常方便处理去重、集合运算和缓存等问题。Set接口实现的类有HashSet、TreeSet和LinkedHashSet,可以根据不同的需求进行选择。

  除了常用的增删查方法之外,Set接口还提供了许多其他操作,如集合运算、比较和哈希等。在使用时需要注意其可选的操作,在进行修改操作前需要判断是否支持。

  最后,通过本文所提供的基本测试用例,使得读者可以更好地理解和熟悉Set接口的使用。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

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

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

相关文章

数据驱动实战二

目标 掌握数据驱动的开发流程掌握如何读取JSON数据文件巩固PO模式 1. 案例 对TPshop网站的登录模块进行单元测试 1.1 实现步骤 编写测试用例采用PO模式的分层思想对页面进行封装编写测试脚本定义数据文件&#xff0c;实现参数化 1.2 用例设计 1.3 数据文件 {"login…

设置LCD为第二终端

我一直使用xshell端&#xff0c;开发板通过串口和 xshell进行通信。 调试好LCD 驱动之后&#xff0c;可以设置 LCD 作为终端&#xff0c;也就是开发板使用自己的显示 设备作为自己的终端&#xff0c;然后接上键盘就可以直接在开发板上敲命令了&#xff0c;将 LCD 设置为终端控制…

Linux(利用gdb进行调试)

gdb: gdb是GNU debugger的缩写&#xff0c;是编程调试工具。 gdb功能 1.启动程序&#xff0c;可以按照用户自定义的要求随心所欲的运行程序。 2.让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。 3.当程序停住时&#xff0c;可以检查此时程序中所发…

基于torch_dispatch机制生成Megatron-DeepSpeed调用关系图

基于torch_dispatch机制生成Megatron-DeepSpeed调用关系图 一.局部效果图二.运行训练过程,拦截算子,生成调用关系信息三.可视化,生成SVG图像 想知道Megatron-DeepSpeed训练过程中各模块之间的调用关系。torch_dispatch机制可以拦截算子,inspect又能获取到调用栈(文件,类名,函数…

笔记本电脑怎么查看硬盘型号?无需额外软件,五招让你轻松掌握

随着科技的进步&#xff0c;笔记本电脑已经成为我们日常生活和工作中不可或缺的工具。而在选购或维护笔记本电脑时&#xff0c;了解硬盘的型号和性能是至关重要的。本文以windows10系统为例&#xff0c;将向您介绍几招&#xff0c;帮助您轻松掌握查看笔记本电脑硬盘型号的方法。…

适合年轻人的恋爱交友脱单软件有哪些?中国十大社交软件排行榜分享

交友始祖&#xff1a;Tinder 一直很受欢迎&#xff0c;可以向上扫给 super like (每日有一次免费机会)。如果双方互相 like&#xff0c;代表配对成功&#xff0c;就可以开始聊天。另外&#xff0c;每日有 10 个 top picks 供选择&#xff0c;你可以免费选一位 主力编外&#xf…

Java医院绩效考核系统源码maven+Visual Studio Code一体化人力资源saas平台系统源码

Java医院绩效考核系统源码mavenVisual Studio Code一体化人力资源saas平台系统源码 医院绩效解决方案包括医院绩效管理&#xff08;BSC&#xff09;、综合奖金核算&#xff08;RBRVS&#xff09;&#xff0c;涵盖从绩效方案的咨询与定制、数据采集、绩效考核及反馈、绩效奖金核…

67万英语单词学习词典ACCESS\EXCEL数据库

这似乎是最多记录的英语单词学习词典&#xff0c;包含复数、过去分词等形式的单词。是一个针对想考级的人员辅助背单词学英语必备的数据&#xff0c;具体请自行查阅以下的相关截图。 有了数据才能想方设法做好产品&#xff0c;结合权威的记忆理论&#xff0c;充分调动用户的眼…

Cocos creator实现《战机长空》关卡本地存储功能

Cocos creator实现《战机长空》关卡本地存储功能 Cocos creator在开放小游戏过程中&#xff0c;经常会出现设置关卡&#xff0c;这里记录一下关卡数据本地存储功能。 一、关卡设置数据 假如我们有关卡数据如下&#xff0c; let settings [ { level: 1, // 第1关 score: 0,…

画出入学管理系统的顶层图和1层图

&#xff08;学校作业&#xff09; 题目如下&#xff1a; 某培训机构入学管理系统有报名、交费和就读等多项功能&#xff0c;下面是对其各项功能的说明&#xff1a; 1、报名&#xff1a;由报名处负责&#xff0c;需要在学员登记表上进行报名登记&#xff0c;需要查询课…

微软必应bing国内广告开户费用?如何开户投放?

当下搜索引擎广告无疑是企业触达潜在客户、提升品牌曝光度的重要途径之一&#xff0c;微软必应&#xff08;Bing&#xff09;作为全球第二大搜索引擎&#xff0c;尽管在国内市场份额上可能不敌某些本土巨头&#xff0c;但其独特的用户群体和国际影响力使其成为众多企业拓展市场…

【数据结构与算法】常见的排序算法

文章目录 排序的概念冒泡排序&#xff08;Bubble Sort&#xff09;插入排序&#xff08;Insert Sort&#xff09;选择排序&#xff08;Select Sort&#xff09;希尔排序&#xff08;Shell Sort&#xff09;写法一写法二 快速排序&#xff08;Quick Sort&#xff09;hoare版本&a…

前端Vue uView 组件<u-search> 自定义右侧搜索按钮样式

前言 uView 文档的效果不是ui设计的样式 需要重新编辑 原效果 ui设计效果 解决方案 设置里说明的需要传一个样式对象 这个对象 需要写在 script 标签里面 这里需要遵循驼峰命名 比如font-size 改为 fontSize lineHeight和textAlign为水平锤子居中效果 searchStyle: {ba…

Box86源码解读记录

1. 背景说明 Github地址&#xff1a;https://github.com/ptitSeb/box86 官方推荐的视频教程&#xff1a;Box86/Box64视频教程网盘 2. 程序执行主体图 Box86版本: Box86 with Dynarec v0.3.4 主函数会执行一大堆的初始化工作&#xff0c;包括但不限于&#xff1a;BOX上下文 …

腾讯云coding代码托管平台配置问题公钥拉取失败提示 Permission denied(publickey)

前言 最近在学校有个课设多人开发一个游戏&#xff0c;要团队协作&#xff0c;选用了腾讯云的coding作为代码管理仓库&#xff0c;但在配置的时候遇到了一些问题&#xff0c;相比于github&#xff0c;发现腾讯的coding更难用&#xff0c;&#xff0c;&#xff0c;这里记录一下…

【Android Studio】【NCNN】YOLOV8安卓部署

目录 下载Android Studio 克隆安卓项目 关于自训练模型闪退问题 下载Android Studio 下载Android Studio&#xff0c;配置安卓开发环境&#xff0c;这个过程比较漫长。 安装cmake&#xff0c;注意安装的是cmake3.10版本。 根据手机安卓版本选择相应的安卓版本&#xff0c…

彻底解决python的pip install xxx报错(文末附所有依赖文件)

今天安装pip install django又报错了&#xff1a; C:\Users\Administrator>pip install django WARNING: Ignoring invalid distribution -ip (d:\soft\python\python38\lib\site-pac kages) Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting djan…

论文阅读:The Unreasonable Ineffectiveness of the Deeper Layers 层剪枝与模型嫁接的“双生花”

作者实证研究了针对流行的开放式预训练 LLM 系列的简单层修剪策略&#xff0c;发现在不同的 QA 基准上&#xff0c;直到去掉一大部分&#xff08;最多一半&#xff09;层&#xff08;Transformer 架构&#xff09;后&#xff0c;性能的下降才会降到最低。为了修剪这些模型&…

数控六面钻适用场景-不止家具制造

在快节奏的现代生活中&#xff0c;家具作为我们生活的重要组成部分&#xff0c;其美观度和实用性日益受到人们的关注。而在这背后&#xff0c;一个不可或缺的“工匠”正默默地发挥着它的作用——那就是数控六面钻。 数控六面钻&#xff0c;顾名思义&#xff0c;是一种高度自动…

msix packaging tool打包问题

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…