Java集合框架-Collection-Set-HashSetTreeSetLinkedHashSet简介

news2024/12/26 22:30:49

目录

    • 一、HashSet
      • 概述
      • 底层数据结构
      • 常用方法
    • 二、TreeSet
      • 概述
      • 底层数据结构
      • 常用方法
    • 三、LinkedHashSet
      • 概述
      • 底层数据结构
      • 常用方法

一、HashSet

在这里插入图片描述

概述

HashSet 是 Java 中的一个集合类,它实现了 Set 接口,用于存储不重复的元素。它基于 HashMap 实现(对HashMap的一个简单封装),底层数据结构是HashTable,并继承了 HashMap 的一些方法。需要注意的是,HashSet 中的元素是无序的,并且不允许重复。

底层数据结构

/**
 * The HashMap which backs this Set.
 */
private transient HashMap<T, String> map;

常用方法

HashSet 是 Java 中的一个集合类,它实现了 Set 接口,用于存储不重复的元素。它基于 HashMap 实现,并继承了 HashMap 的一些方法。

添加元素

  • add(E e): 将指定的元素添加到 HashSet 中,如果元素已经存在,则不添加并返回 false
  • addAll(Collection c): 将指定集合中的所有元素添加到 HashSet 中。

删除元素

  • remove(Object o): 从 HashSet 中删除指定的元素,如果元素存在则返回 true,否则返回 false
  • clear(): 清空 HashSet 中的所有元素。

判断元素

  • contains(Object o): 判断 HashSet 中是否包含指定的元素,如果包含则返回 true,否则返回 false
  • isEmpty(): 判断 HashSet 是否为空,如果为空则返回 true,否则返回 false

获取信息

  • size(): 返回 HashSet 中元素的数量。
  • iterator(): 返回一个迭代器,用于遍历 HashSet 中的元素。

其他方法

  • toArray(): 将 HashSet 中的元素转换为数组。
  • containsAll(Collection c): 判断 HashSet 是否包含指定集合中的所有元素。
  • removeAll(Collection c): 从 HashSet 中删除包含在指定集合中的所有元素。
  • retainAll(Collection c): 从 HashSet 中删除所有未包含在指定集合中的元素。

二、TreeSet

在这里插入图片描述

概述

TreeSet 也是 Java 中的一个集合类,它同样实现了 Set 接口,并继承了 SortedSet 接口。TreeSet 基于 TreeMap 实现,底层数据结构是红黑树,可以对元素进行排序。需要注意的是,TreeSet 中的元素是有序的,并且不允许重复。元素的排序方式取决于元素的自然顺序或指定的比较器。

底层数据结构

/**
 * The NavigableMap which backs this Set.
 */
// Not final because of readObject. This will always be one of TreeMap or
// TreeMap.SubMap, which both extend AbstractMap.
private transient NavigableMap<T, String> map;

常用方法

添加元素

  • add(E e): 将指定的元素添加到 TreeSet 中,并根据元素的自然顺序或指定的比较器进行排序。
  • addAll(Collection c): 将指定集合中的所有元素添加到 TreeSet 中。

删除元素

  • remove(Object o): 从 TreeSet 中删除指定的元素。
  • clear(): 清空 TreeSet 中的所有元素。

判断元素

  • contains(Object o): 判断 TreeSet 中是否包含指定的元素。
  • isEmpty(): 判断 TreeSet 是否为空。
  • first(): 返回 TreeSet 中的第一个元素。
  • last(): 返回 TreeSet 中的最后一个元素。

范围操作

  • headSet(E toElement): 返回小于指定元素的元素集合。
  • tailSet(E fromElement): 返回大于等于指定元素的元素集合。
  • subSet(E fromElement, E toElement): 返回大于等于 fromElement 且小于 toElement 的元素集合。

导航方法

  • lower(E e): 返回小于指定元素的最大的元素。
  • higher(E e): 返回大于指定元素的最小元素。
  • floor(E e): 返回小于等于指定元素的最大的元素。
  • ceiling(E e): 返回大于等于指定元素的最小的元素。

其他方法

  • size(): 返回 TreeSet 中元素的数量。
  • iterator(): 返回一个迭代器,用于遍历 TreeSet 中的元素。
  • descendingIterator(): 返回一个逆序迭代器,用于逆序遍历 TreeSet 中的元素。

三、LinkedHashSet

在这里插入图片描述

概述

LinkedHashSet 继承自 HashSet 并实现了 Set 接口。LinkedHashSet 的特点是维护元素的插入顺序,也就是说,遍历 LinkedHashSet 中的元素时,会按照元素添加的顺序访问它们。需要注意的是,LinkedHashSet 中的元素也是不允许重复的;LinkedHashSet 与 HashSet 的主要区别在于:LinkedHashSet 维护元素的插入顺序,而 HashSet 不维护。LinkedHashSet 的性能略低于 HashSet,因为需要维护插入顺序。

底层数据结构

LinkedHashSet的底层数据是哈希表+双向链表

常用方法

添加元素

  • add(E e): 将指定的元素添加到 LinkedHashSet 的末尾。
  • addAll(Collection c): 将指定集合中的所有元素添加到 LinkedHashSet 的末尾。

删除元素

  • remove(Object o): 从 LinkedHashSet 中删除指定的元素。
  • clear(): 清空 LinkedHashSet 中的所有元素。

判断元素

  • contains(Object o): 判断 LinkedHashSet 中是否包含指定的元素。
  • isEmpty(): 判断 LinkedHashSet 是否为空。

获取信息

  • size(): 返回 LinkedHashSet 中元素的数量。
  • iterator(): 返回一个迭代器,用于按照插入顺序遍历 LinkedHashSet 中的元素。

其他方法

  • toArray(): 将 LinkedHashSet 中的元素转换为数组。
  • containsAll(Collection c): 判断 LinkedHashSet 是否包含指定集合中的所有元素。
  • removeAll(Collection c): 从 LinkedHashSet 中删除包含在指定集合中的所有元素。
  • retainAll(Collection c): 从 LinkedHashSet 中删除所有未包含在指定集合中的元素。

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

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

相关文章

【WEEK9】 【DAY5】Web开发静态资源处理【中文版】

2024.4.26 Friday 目录 7.Web开发静态资源处理7.1.Web开发探究7.1.1.简介7.1.2.使用SpringBoot的步骤&#xff1a;7.1.2.1.创建一个SpringBoot应用&#xff0c;选择我们需要的模块&#xff0c;SpringBoot就会默认将我们的需要的模块自动配置好7.1.2.2.手动在配置文件中配置部分…

.NET Core Swagger运行异常

遇到的问题 因为新增了一个控制器方法&#xff0c;从而导致在运行Swagger的时候直接报错&#xff0c;异常如下&#xff1a; SwaggerGeneratorException: Conflicting method/path combination "POST api/UserOperationExample" for actions - WebApi.Controllers.Us…

OpenSceneGraph

文章目录 关于 OpenSceneGraphScreenshots - OpenMW 关于 OpenSceneGraph 官网&#xff1a;https://openscenegraph.github.io/openscenegraph.io/github : https://github.com/openscenegraph/OpenSceneGraphClasses : https://podsvirov.github.io/osg/reference/opensceneg…

汽车新智能图谱里:理解腾讯的AI TO B路径

将自身的C2B产品和产业理解充分AI化&#xff0c;在自身内部场景率先验证跑通后&#xff0c;进而释放给产业伙伴&#xff0c;对应到具体的需求痛点&#xff0c;一起打磨对应的行业AI模型。 这也恰是腾讯“实用”标签背后的AI产业路径。 作者|皮爷 出品|产业家 成本、性价…

用NuGet安装 Oracle ODP.NET

oracle官网原文&#xff1a;Using NuGet to Install and Configure Oracle Data Provider for .NET Using NuGet to Install and Configure Oracle Data Provider for .NET In this section, you will install ODP.NET NuGet packages from nuget.org. Select View > Solut…

CARLA (I)--Ubuntu20.04 服务器安装 CARLA_0.9.13服务端和客户端详细步骤

目录 0. 说明0.1 应用场景&#xff1a;0.2 本文动机&#xff1a; 1. 准备工作2. 安装 CARLA 服务端软件【远程服务器】3. 安装 CARLA 客户端【远程服务器】3.1 .egg 文件安装&#xff1a;3.2 .whl 文件安装&#xff1a;3.3 从Pypi下载Python package 4. 运行服务端程序5. 运行客…

分布式版本控制系统——Git

分布式版本控制系统——Git 一、Git安装二、创建版本库三、将文件交给Git管理四、Git的工作区和暂存区1.工作区&#xff08;Working Directory&#xff09;2.版本库 五、版本回退和撤销修改1.版本回退2.撤销修改 六、删除文件七、常用基础命令总结八、参考 分布式版本控制系统&…

快手面试算法真题

按照html中的标签层数遍历节点名。 例如&#xff1a;html代码如下&#xff1a;(上面的数字表示层数) <!-- 1 --><div class"div1"><!-- 2 --><span class"span1"></span><!-- 2 --><p class"p1"><…

Chrome 网络调试程序 谷歌网络调试 network

目录 1.网络面板总览2.概况了解3.Waterfall接口排队等待时间4.关注请求接口的Size,可能是占据内存溢出的接口5.过滤器一栏 fetch/xhr 什么意思6. Stalled 什么意思7.Queueing 什么意思8.Queueing和Stalled之间什么关系9.为什么会有阻塞状态10.Time列是pending 什么意思 1.网络面…

【03-掌握Scikit-learn:深入机器学习的实用技术】

文章目录 前言数据预处理缺失值处理数据缩放 特征选择模型训练参数调整模型评估总结 前言 经过了对Python和Scikit-learn的基础安装及简单应用&#xff0c;我们现在将更深入地探究Scikit-learn的实用技术&#xff0c;以进一步提升我们的数据科学技能。在本文中&#xff0c;我们…

江苏开放大学2024年春《机电设备安装与调试 050095》第三次形成性考核作业参考答案

电大搜题 多的用不完的题库&#xff0c;支持文字、图片搜题&#xff0c;包含国家开放大学、广东开放大学、超星等等多个平台题库&#xff0c;考试作业必备神器。 公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#…

【React】CSS 局部样式

书写 CSS 的时候&#xff0c;如果 CSS 文件名包含 module&#xff0c;那么说明该 CSS 是一个局部 CSS 样式文件&#xff0c;类似于 vue 中的 scoped。 .avatarContainer {width: 40px;height: 40px;border-radius: 50%;background: rgb(213, 226, 226); }import styles from ..…

tcp服务器端与多个客户端连接

如果希望Tcp服务器端可以与多个客户端连接&#xff0c;可以这样写&#xff1a; tcpServernew QTcpServer(this);connect(tcpServer,SIGNAL(newConnection()),this,SLOT(onNewConnection())); void MainWindow::onNewConnection() {QTcpSocket *tcpSocket;//TCP通讯的Sockettcp…

分布式WEB应用中会话管理的变迁之路

Session一词直译为“会话”&#xff0c;意指有始有终的一系列动作&#xff0f;消息。Session是Web应用蓬勃发展的产物之一&#xff0c;在Web应用中隐含有“面向连接”和“状态保持”两个含义&#xff0c;同时也指代了Web服务器与客户端之间进行状态保持的解决方案。 在Web应用…

从单按键状态机思维扫描引申到4*4矩阵按键全键无冲扫描,一步一步教,超好理解,超好复现(STM32程序例子HAL库)

目前大部分代码存在的问题 ​ 单次只能对单个按键产生反应&#xff1b;多个按键按下就难以修改&#xff1b;并且代码耦合度较高&#xff0c;逻辑难以修改&#xff0c;对于添加长按&#xff0c;短按&#xff0c;双击的需求修改困难。 解决 16个按键按下无冲&#xff0c;并且代…

微信小程序开发:2.小程序组件

常用的视图容器类组件 View 普通的视图区域类似于div常用来进行布局效果 scroll-view 可以滚动的视图&#xff0c;常用来进行滚动列表区域 swiper and swiper-item 轮播图的容器组件和轮播图的item项目组件 View组件的基本使用 案例1 <view class"container"&…

LT9611UXC双端口 MIPI DSI/CSI 转 HDMI2.0,带音频

1. 说明 LT9611UXC 是一款高性能 MIPI DSI/CSI 至 HDMI2.0 转换器。MIPI DSI/CSI 输入具有可配置的单端口或双端口&#xff0c;具有 1 个高速时钟通道和 1~4 个高速数据通道&#xff0c;工作速率最高为 2Gbps/通道&#xff0c;可支持高达 16Gbps 的总带宽。 LT9611UXC 支持突发…

Fluent.Ribbon创建Office的RibbonWindow菜单

链接&#xff1a; Fluent.Ribbon文档 优势&#xff1a; 1. 可以创建类似Office办公软件的复杂窗口&#xff1b; 2. 可以应用自定义主题风格界面

视频滚动字幕一键批量轻松添加,解锁高效字幕编辑,提升视频质量与观众体验

视频已成为我们获取信息、娱乐休闲的重要渠道。一部成功的视频作品&#xff0c;除了画面精美、音质清晰外&#xff0c;字幕的添加也是至关重要的一环。字幕不仅能增强视频的观感&#xff0c;还能提升信息的传达效率&#xff0c;让观众在享受视觉盛宴的同时&#xff0c;更加深入…

SpringCloud系列(18)--将服务提供者Provider注册进Consul

前言&#xff1a;在上一章节中我们把服务消费者Consumer注册进了Zookeeper&#xff0c;并且成功通过服务消费者Consumer调用了服务提供者Provider&#xff0c;而本章节则是关于如何将服务提供者Provider注册进Consul里 准备环境&#xff1a; 先安装Consul&#xff0c;如果没有…