当前位置: 首页 > news >正文

[数据结构] Set的使用与注意事项

目录

Set的说明

常见方法说明

注意事项

TreeSet使用案例


Set的说明

Set与Map主要的不同有两点: Set是继承自Collection的接口类,Set中只存储了Key.

常见方法说明

方法解释
boolean add(E e)添加元素,但重复元素不会被添加成功
void clear()清空集合
boolean contains(Object o)判断o是否在集合中
Iterator<E> iterator()返回迭代器
boolean remove(Object o)删除集合中的o
int size()返回集合中元素的个数
boolean isEmpty()检测set是否为空,空返回true,否则返回false
Object[] toArray()将set中的元素转换为数组返回
boolean containsAll(Collection<?> c集合c中的元素是否在set中全部存在,是返回true,否则返回false
boolean addAll(Collection<? extends E> c)将集合c中的元素添加到set中,可以达到去重的效果

注意事项

  1. Set是继承自Collection的一个类接口
  2. Set中只存储了Key,并且要求key一定要唯一(key不可以重复)
  3. TreeSet的底层是使用Map来实现的, 其使用key与Object的一个默认对象作为键值对插入到Map中的
  4. Set最大的功能就是对集合中的元素进行去重
  5. 实现Set接口的常用类有TreeSet和HashSet, 还有一个LinkedHashSet, LinkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入次序.
  6. Set中的key不能修改,如果要修改,先将原来的删除掉, 然后再重新加入
  7. TreeSet中不能插入null的key,HashSet可以.
Set底层结构TreeSetHashSet
底层结构红黑树哈希桶
插入/删除/查找时间复杂度O(log_{2}n)O(1)
是否有序关于key有序不一定有序
线程安全不安全不安全
插入/删除/查找区别按照红黑树的特性来进行插入和删除1.先计算key哈希地址 2.然后进行插入和删除
比较与覆写key必须能够比较,否则会抛出ClassCastExcetion异常自定义类型需要覆写equals和hashCode方法
应用场景      需要key有序场景下key是否有序不关心,需要更高的时间性能

TreeSet使用案例

public static void TestSet() {Set<String> s = new TreeSet<>();// add(key) : 如果key不存在,则插入,返回true;// 如果key存在,返回falseboolean isIn = s.add("1");System.out.println(isIn);s.add("2");s.add("3");s.add("4");s.add("5");isIn = s.add("1");System.out.println(isIn);System.out.println(s.size());System.out.println(s);// add(key): key如果是空,抛出空指针异常// s.add(null);//contains(key): 如果key存在,返回true,否则返回falseSystem.out.println(s.contains("1"));System.out.println(s.contains("10"));// remove(key): key存在,删除成功返回true//              key不存在,删除失败,返回false//              key为空,抛出空指针异常s.remove("1");System.out.println(s);s.remove("10");System.out.println(s);Iterator<String> it = s.iterator();while(it.hasNext()) {System.out.println(it.next() + " ");}System.out.println();}

相关文章:

[数据结构] Set的使用与注意事项

目录 Set的说明 常见方法说明 注意事项 TreeSet使用案例 Set的说明 Set与Map主要的不同有两点: Set是继承自Collection的接口类,Set中只存储了Key. 常见方法说明 方法解释boolean add(E e)添加元素,但重复元素不会被添加成功void clear()清空集合boolean contains(Object…...

amis组件crud使用踩坑

crud注意 过滤条件参数同步地址栏 默认 CRUD 会将过滤条件参数同步至浏览器地址栏中&#xff0c;比如搜索条件、当前页数&#xff0c;这也做的目的是刷新页面的时候还能进入之前的分页。 但也会导致地址栏中的参数数据合并到顶层的数据链中&#xff0c;例如&#xff1a;自动…...

离线统信系统的python第三方库批量安装流程

一、关于UOS本机 操作系统&#xff1a;UOS&#xff08;基于Debian的Linux发行版&#xff09; CPU&#xff1a;海光x86 二、具体步骤 1、在联网的电脑上用控制台的pip命令批量下载指定版本的第三方库 方法A cd <目标位置的绝对路径> pip download -d . --platform many…...

韶音科技:消费电子行业售后服务实现数字化转型,重塑客户服务体系

韶音科技&#xff1a;消费电子行业售后服务实现数字化转型&#xff0c;重塑客户服务体系 在当今这个科技日新月异的时代&#xff0c;企业之间的竞争早已超越了单纯的产品质量比拼&#xff0c;**售后服务成为了衡量消费电子行业各品牌实力与客户满意度的关键一环。**深圳市韶音…...

神经网络|(九)概率论基础知识-泊松分布及python仿真

【1】引言 在前序学习进程中&#xff0c;我们已经知晓二项分布是多重伯努利分布&#xff0c;二伯努利分布对应的是可以无限重复、结果只有两种可能的随机试验。 相关文章链接为&#xff1a; 神经网络|(八)概率论基础知识-二项分布及python仿真-CSDN博客 上述文章还调用nump…...

114,【6】攻防世界 web wzsc_文件上传

进入靶场 传个桌面有的 直接空白了 我们 访问一下上传的东西 /index 没显示用于解析的.htaccess和.user.ini 文件&#xff0c;还两个都不显示 .htaccess 和 .user.ini 文件分别用于 Apache 服务器和 PHP-FPM 环境的目录级配置 但上传的时候bp查看状态码是200&#xff0c;…...

【Kubernetes的SpringCloud最佳实践】有Service是否还需要Eureka?

在 Kubernetes 中部署 Spring Cloud 微服务时&#xff0c;是否还需要 Eureka 取决于具体场景和架构设计。以下是详细的实践建议和结论&#xff1a; 1. Kubernetes 原生服务发现 vs Eureka Kubernetes 自身提供了完善的服务发现机制&#xff08;通过 Service 资源&#xff09;&…...

SQL最佳实践(笔记)

写在前面&#xff1a; 之前baeldung的Java Weekly &#xfeff;Reviews里面推荐了一篇关于SQL优化的文章&#xff0c;正好最近在学习数据库相关知识&#xff0c;记一些学习笔记 原文地址&#xff1a;SQL Best Practices Every Java Engineer Must Know 1. 使用索引 使用索引…...

vue3学习四

七 标签ref属性 设置标签ref属性&#xff0c;类似于设置标签id。 普通标签 <template name"test4"> <p ref"title" id"title" click"showinfo">VIEW4</p> <View3/><script lang"ts" setup>…...

C# LiteDB 使用教程

一、引言 在软件开发中&#xff0c;数据存储和管理是至关重要的一环。对于小型项目或者对性能和便捷性有较高要求的场景&#xff0c;传统的大型数据库可能显得过于笨重。而 LiteDB 作为一款轻量级的嵌入式 NoSQL 数据库&#xff0c;为开发者提供了一个简洁、高效的解决方案。它…...

Python Pandas(3):DataFrame

1 介绍 DataFrame 是 Pandas 中的另一个核心数据结构&#xff0c;类似于一个二维的表格或数据库中的数据表。它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。DataFrame 既有行索引也有列索引&#xff0c;它可以被看做由…...

使用通义灵码 ai编程 来提高开发效率

1、我们先新建一个Hello&#xff0c;world的vue3项目&#xff08;快速上手 | Vue.js&#xff09; 创建好以后&#xff0c;运行以下界面&#xff1a; about界面如下&#xff0c;现在我们让灵码给我们修改一下这个字体的颜色及加点其它的样式&#xff1a; 2、先选中样式&#xf…...

【OpenCV】入门教学

&#x1f3e0;大家好&#xff0c;我是Yui_&#x1f4ac; &#x1f351;如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f680;如有不懂&#xff0c;可以随时向我提问&#xff0c;我会全力讲解~ &#x1f52…...

大数据项目4:基于spark的智慧交通项目设计与实现

项目概述 项目直达 www.baiyuntu.com 随着交通数据的快速增长&#xff0c;传统的交通管理方式已无法满足现代城市的需求。交通大数据分析系统通过整合各类交通数据&#xff0c;利用大数据技术解决交通瓶颈问题&#xff0c;提升交通管理效率。本项目旨在通过大数据技术&#…...

netcore openTelemetry+prometheus+grafana

一、netcore项目 二、openTelemetry 三、prometheus 四、grafana添加Dashborad aspire/src/Grafana/dashboards at main dotnet/aspire GitHub 导入&#xff1a;aspnetcore.json和aspnetcore-endpoint.json 效果&#xff1a;...

Spring Boot接入Deep Seek的API

1&#xff0c;首先进入deepseek的官网&#xff1a;DeepSeek | 深度求索&#xff0c;单击右上角的API开放平台。 2&#xff0c;单击API keys&#xff0c;创建一个API&#xff0c;创建完成务必复制&#xff01;&#xff01;不然关掉之后会看不看api key&#xff01;&#xff01;&…...

Git、Github和Gitee完整讲解:丛基础到进阶功能

第一部分&#xff1a;Git 是什么&#xff1f; 比喻&#xff1a;Git就像是一本“时光机日记本” 每一段代码的改动&#xff0c;Git都会帮你记录下来&#xff0c;像是在写日记。如果出现问题或者想查看之前的版本&#xff0c;Git可以带你“穿越回过去”&#xff0c;找到任意时间…...

MyBatis的工作流程是怎样的?

大家好&#xff0c;我是锋哥。今天分享关于【MyBatis的工作流程是怎样的&#xff1f;】面试题。希望对大家有帮助&#xff1b; MyBatis的工作流程是怎样的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 的工作流程可以分为几个主要的步骤&…...

Maven 安装配置(完整教程)

文章目录 一、Maven 简介二、下载 Maven三、配置 Maven3.1 配置环境变量3.2 Maven 配置3.3 IDEA 配置 四、结语 一、Maven 简介 Maven 是一个基于项目对象模型&#xff08;POM&#xff09;的项目管理和自动化构建工具。它主要服务于 Java 平台&#xff0c;但也支持其他编程语言…...

分享如何通过Mq、Redis、XxlJob实现算法任务的异步解耦调度

一、背景 1.1 产品简介 基于大模型塔斯&#xff0c;整合传统的多项能力&#xff08;NLP、OCR、CV等&#xff09;&#xff0c;构建以场景为中心的新型智能文档平台。通过文档审阅&#xff0c;实现结构化、半结构化和非结构化文档的信息获取、处理及审核&#xff0c;同时基于大…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...