java数据结构了解与集合学习

【Java集合框架】13——HashSet 类 HashSet 阅读详情

数据结构

数据结构是指逻辑意义上的数据组织方式及其相应的处理方式。

逻辑意义:数据结构的抽象表达非常丰富,而实际物理存储方式相对单一。比如:二叉树结构,在物理上可能也是基于链式存储的。

数据组织方式:

比如树、图、队列、 晗希等。树可以是二叉树、三叉树、 树等,图可以是有向图或无向图,队歹lj 是先

进先出的线性结构;晗希是根据某种算法直接定位的数据组织方式。

 

处理方式:调用算法进行增删改查处理。

数据结构的分类:

线性结构

树结构

图结构

哈希结构:

一个元素为链表的数组,综合了数组与链表的优点。

集合

程序 = 数据结构 + 算法

集合做为数据结构的载体,可对元素进行加工和输出,以一定的算法实现最基本的增删改查功能,因此集合是所有编程语言的基础。

从上图可以看出,集合分为实现Collection的Set、List、Queue和按照key-value存储的Map。

List集合

框架图:

由框架图可知,List常用的两个类为ArrayList和LinkedList。

ArrayList与LinkedList的区别:

数据结构:

ArrayList是基于数组实现的,LinkedList是基于双链表实现的。

功能:

LinkedList类不仅是List接口的实现类,可以根据索引来随机访问集合中的元素,除此之外,LinkedList还实现了Deque接口,Deque接口是Queue接口的子接口,它代表一个双向队列,这个接口具有队列和栈的性质,因此LinkedList可以作为双向队列 ,栈和List集合使用,功能强大。

效率:

Array是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的,可以直接返回数组中index位置的元素,因此在随机访问集合元素上有较好的性能。Array获取数据的时间复杂度是O(1),但是要插入、删除数据却是开销很大的,因为这需要移动数组中插入位置之后的的所有元素。

LinkedList的随机访问集合元素时性能较差,因为需要在双向列表中找到要index的位置,再返回;但在插入,删除操作是更快的。因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n),而LinkedList中插入或删除的时间复杂度仅为O(1)。ArrayList在插入数据时还需要更新索引(除了插入数组的尾部)。

内存:

LinkedList需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,而LinkedList中的每个节点中存储的是实际的数据和前后节点的位置。

Set集合

Set(接口) 添加到 Set 的每个元素都必须是独一无二的;否则Set 就不会添加重复的元素。添加到 Set 里

的对象必须定义equals(),从而建立对象的唯一性。Set 拥有与 Collection 完全相同的接口。一个 Set不能

保证自己可按任何特定的顺序维持自己的元素

HashSet* 用于除非常小的以外的所有Set。对象也必须定义 hashCode()

TreeSet 由一个“红黑树”后推得到的顺序 Set。这样一来,我们就可以从一个Set 里提到一个

顺序集合

Set框架

由Set框架可知,Set主要分为TreeSet和HashSet以及HashSet的继承类LinkedHashSet

HashSet:

HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。底层数据结构是哈希表结构。

内部存储机制

当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode方法来得到该对象的hashCode值,然后根据该hashCode值决定该对象在HashSet中的存储位置。如果有两个元素通过equals方法比较true,但它们的hashCode方法返回的值不相等,HashSet将会把它们存储在不同位置,依然可以添加成功。
也就是说。HashSet集合判断两个元素的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode方法返回值也相等。

HashSet的特点:

无序不可重复,值可以为null;

靠元素重写hashCode方法和equals方法来判断两个元素是否相等,如果相等则覆盖原来的元素,依此来确保元素的唯一性

LinkedHashSet

LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置,但它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的,也就是说当遍历集合LinkedHashSet集合里的元素时,集合将会按元素的添加顺序来访问集合里的元素。
因此:

LinkedHashSet是hash表结构,有序不可重复的。可以放入null

TreeSet

由Set框架图可知,TreeSet除了与HashSet一样继承了AbstractSet外,也实现了SortedSet接口。因此TreeSet可以确保集合元素出于有序状态。

内部存储机制
TreeSet内部实现的数据结构是树结构-红黑二叉树,默认排序为从小到大。

TreeSet的特点:

红黑二叉树结构,有序不可重复,可排序,不能存入null值。

与HashSet集合相比,TreeSet还提供了几个额外方法:

  • Comparator comparator():如果TreeSet采用了定制顺序,则该方法返回定制排序所使用的Comparator,如果TreeSet采用自然排序,则返回null;
  • Object first():返回集合中的第一个元素;
  • Object last():返回集合中的最后一个元素;
  • Object lower(Object e):返回指定元素之前的元素。
  • Object higher(Object e):返回指定元素之后的元素。
  • SortedSet subSet(Object fromElement,Object toElement):返回此Set的子集合,含头不含尾;
  • SortedSet headSet(Object toElement):返回此Set的子集,由小于toElement的元素组成;
  • SortedSet tailSet(Object fromElement):返回此Set的子集,由大于fromElement的元素组成;

Queue集合

队列,这里不多介绍

Collections

Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

《java编程思想》内使用Collections概括:

boolean add(Object) *保证集合内包含了自变量。如果它没有添加自变量,就返回 false(假)

boolean addAll(Collection) *添加自变量内的所有元素。如果没有添加元素,则返回 true(真)

void clear() *删除集合内的所有元素

boolean contains(Object) 若集合包含自变量,就返回“真”

boolean containsAll(Collection) 若集合包含了自变量内的所有元素,就返回“真”

boolean isEmpty() 若集合内没有元素,就返回“真”

Iterator iterator() 返回一个反复器,以用它遍历集合的各元素

boolean remove(Object) *如自变量在集合里,就删除那个元素的一个实例。如果已进行了删除,就返回

“真”

boolean removeAll(Collection) *删除自变量里的所有元素。如果已进行了任何删除,就返回“真”

boolean retainAll(Collection) *只保留包含在一个自变量里的元素(一个理论的“交集”)。如果已进

行了任何改变,就返回“真”

int size() 返回集合内的元素数量

Object[] toArray() 返回包含了集合内所有元素的一个数组

*这是一个“可选的”方法,有的集合可能并未实现它。若确实如此,该方法就会遇到一个

 

Map集合

学习map集合,应该首先了解map的数据结构:hash表结构。

Map的框架图如下:

由框架图可知,Map主要分为HashMap和TreeMap,以及集成HashMap的LinkedHashMap。

JDK 1.8 对 HashMap 进行了比较大的优化,底层实现由之前的 “数组+链表” 改为 “数组+链表+红黑树”,

即当链表的长度较少时依然是链表结构,而当链表长度大于8后,会转为红黑树。

如下:

详细的HashMap教程:https://blog.youkuaiyun.com/v123411739/article/details/78996181

HashMap常见问题:https://blog.youkuaiyun.com/v123411739/article/details/106324537

深入理解Java集合框架与数据结构 本文深入探讨了Java集合框架和数据结构的相关知识,包括数组、栈、队列等基本数据结构的应用场景和操作原则。通过一系列问题和答案的形式,解释了Java API中对于null元素的处理、迭代器的快速失败行为、以及不同数据结构在实现上的考虑和限制。文章还涉及了链表、双端队列(Deque)、随机多重集(RandomBag)和随机队列(RandomQueue)等高级数据结构的实现细节和API设计。 阅读详情

相关推荐

云计算虚拟化实验(一)——虚拟机软件VMware的安装以及虚拟机系统的安装(Windows7+CentOS7)

主要内容: 1、虚拟机软件的安装(以VMware为例) 2、虚拟机系统的安装(Window7 + CentOS7) 3、虚拟主机网络互访 4、不同局域网内的虚拟主机互访(软路由——海蜘蛛) 0 ——首先介绍一下什么是虚拟化? 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在

gg_asd的博客 1万+

HashSet集合

一、HashSet集合的概述和特点 在java.util包下,使用需要导包。 二、HashSet集合保证元素唯一性源码分析 add方法: add里边又调用了put方法: put方法里又调用了hash方法: 跟进: 把方法拿过来看: 根据hash方法计算出了一个int值,作为putVal的第一个参数 再看put方法中的putVal方法: final V putVal(int hash, K key, V value, boolean onlyIfAbsent,

weixin_49053303的博客 474

双目相机立体匹配算法概述(含Python代码)

立体匹配任务是计算机视觉中的一个重要问题,旨在从一对具有相同场景的图像中估计每个像素的视差(disparity)。本文对现有的传统算法和深度学习算法进行了综述,以便于各位选择合适的立体匹配算法用于深度估计或三维建模。

m0_59257547的博客 8291

【Java 基础篇】Java HashSet 集合详解:高效存储唯一元素的利器

HashSet是 Java 中的一个集合类,它实现了Set接口。Set是一种不允许包含重复元素的集合,而HashSet则是Set接口的一个具体实现。因此,HashSet用于存储一组唯一的元素,不允许重复。以下是HashSet不允许重复元素:如果试图向HashSet中添加重复的元素,重复元素将被忽略。HashSet不保证元素的顺序,元素在HashSet中是无序的。允许nullHashSet可以包含一个null元素。本文介绍了 Java 中的HashSet。

繁依Fanyi的博客 9914

手把手教你用MaxEnt+ArcGIS玩转物种分布预测

本文详细介绍了如何利用MaxEnt最大熵模型与ArcGIS软件进行物种分布预测。通过实战案例,从数据收集、环境变量处理、模型参数设置到结果可视化分析,手把手教你掌握生态位模型的核心流程。结合SDM toolbox插件,可高效完成数据预处理与高级空间分析,是生态学与保护生物学研究的实用指南。

weixin_29309475的博客 559

UniApp 与 Taro 深度解析:如何根据项目需求选择最佳跨平台框架?

本文深度对比了UniApp和Taro两大主流跨平台开发框架。UniApp基于Vue生态,提供开箱即用的高效开发体验,尤其适合快速覆盖多端小程序;Taro则根植React范式,架构灵活,便于与现有React生态集成,更适合对性能和原生体验有高要求的复杂项目。文章结合团队技术栈、项目类型及性能需求,为开发者提供了清晰的选型指南。

snow3的博客 204

Java八股文——数据结构与集合(一)

java中数据结构相关问题,很适合面试学习

PjhDepon的博客 616

YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 2186

Java小白记录学习路线(java进阶)-----数据结构(为了从底层了解集合),List集合

数据结构 1.1 数据结构有什么用?        在我们学习集合之前要思考一个问题,为什么要使用集合,集合对于数组有什么样的区别,这样我们才能把集合理解透彻。        集合与数组的区别在我上一篇Java小白记录学习路线(java进阶)-----Collection、泛型中提到过,集合是一个长度可变的数组,而不同的集合又有不同的特点,这些不同特点的原理就来自于数据

hu1999 408

BMD101传感器协议解析与STM32实现(LCD显示波形)

1 前言 BMD101传感器是神念科技开发的心电传感器。目前有一些商家开发了BMD101传感器模块,基本上都是利用蓝牙直接传输数据到PC或手机端。而本文介绍通过串口将数据传送给单片机,并在单片机上完成数据解析和心电波形LCD显示的功能。 2 通信协议解读 BMD101 通过 UART 接口通信。这是一个标准的 UART 接口,定义为 1 个起始位,8 个数据位,1 停止位格式,波特率 57600。 串口输出的数据包格式如下: 包括Header(帧头)、data payload(数据有效载荷)、CRC校验

weixin_44509533的博客 9285

跟踪雷达点迹处理

1,点迹定义: 假设研究对象为位置x和速度v,预测值是根据这一时刻的x值、v值来预测下一时刻的x、v;测量值是根据传感器也就是雷达得到的,因为各种误差的存在,这两个值都不准确,所以把他们加权融合,得到一个新的量—状态值。 点迹就是所谓的测量值,由雷达对同一个目标探测到的一系列点(假设目标静止,但由于误差的存在,会扫描出不止一个点),航迹对应状态值,是点迹和预测轨迹的加权融合。 2,雷达信号和点迹处理关系: 3,点迹航迹处理流程 4,仿真 clear all; RealData=G

wangjie36的博客 1万+

【新手向】如何学习Java集合

前言小说搜索引擎 https://shupu.org/ 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 如果认识我的同学可能就知道,我已经写过很多系列级的文章了,但是没有一篇是写给刚入门的同学来看的,大多数都是依照我个人的学习进度来编写。 虽然可以按照我的文章顺序去一篇一篇阅读,但...

爱无止 319

GEE初学:谷歌地球引擎GEE入门指南(最新注册全流程)

本教程详细介绍了谷歌地球引擎(GEE)的注册与基础操作流程。主要内容包括:1)非商业账号注册步骤,需提供学术机构凭证和研究目的;2)Google Cloud项目创建与API激活;3)Shapefile文件上传方法及资源ID获取;4)JavaScript脚本编写与地图可视化实现。教程通过代码示例展示了两种多边形显示方式(填充和轮廓模式),并强调了GEE的云端处理优势,包括免费访问40多年卫星数据、无需本地高性能硬件等特点。整个流程从账号注册到首个地图可视化完成约需10-15分钟,适合遥感分析初学者快速入门。

此星光明博客 2138

Java集合框架

Java集合框架是定义在Java.util包下的一组 接口interfaces 和其 实现类classes。 在Java.util包中,提供了一些实用的方法和数据结构,更设计了一系列标准的泛型接口。熟悉集合框架,更有助于我们学习数据结构以及熟悉不同的使用场景。了解Java集合框架可以说是学习数据结构的基础,更是开发的基础,在笔试当中,也常常以选择题的方式进行相关考察。 集合框架关系图: 注意Map并不继承于Collection!!! 从上面的关系图中,我们很容易就能得到为什么Stack

ting_happy的博客 121

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深入了解Java集合框架:数据结构与应用

Java集合框架位于java.util包中,提供了一系列接口和类用于存储和操作数据。它的设计目标是提供高性能、高可靠性的数据结构,以应对不同的编程需求。主要的集合接口包括Collection和Map,它们又分别有各自的实现类。// 使用ArrayList实现List接口// 使用HashMap实现Map接口获取值// 返回键"Apple"对应的值遍历Map判断键是否存在// 存在键"Banana"

weixin_66441330的博客 1541

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

我大学的时候应该要这样:学习Java集合

如果我是这样学集合,我可能早就成为大牛了

3y 5559

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

关于JAVA集合你了解多少?

1、集合框架的由来 在编程设计中,数据结构(算法)担任着不可或缺的角色,在JAVA语言中,JAVA的设计者将数据结构进行了封装,这个封装的整体就叫做集合框架,在进行JAVA应用程序开发时,可以根据需要创建相应的对象,而不必再去设计数据结构和具体的算法实现,这样就大大提高了编程效率。 2、集合框架的结构(jdk1.8) JAVA集合框架主要由两个接口派生而出,分别是Collection接口进入Map...

qq_36526036的博客 5402

Java集合——数据结构

Java集合——数据结构 https://blog.youkuaiyun.com/bj_chengrong/article/details/108667887 https://binhao.blog.youkuaiyun.com/article/details/113279914 https://www.cnblogs.com/paddix/p/5539326.html 1.集合简介 ​ Java中集合类是Java编程中使用最频繁、最方便的类。集合类作为容器类可以存储任何类型的数据,当然也可以结合泛型存储指定的类型(不过泛型

weixin_46307478的博客 4276

【数据结构】初识集合框架及背后的数据结构(简单了解)

Java 集合框架(Java Collection Framework),又被称为容器(container)是定义在 java.util 包下的一组接口 (interfaces) 和其实现类 (classes)。util 工具,称工具包,因此基本上在Java当中与工具相关的都在util包底下。其主要表现为将多个元素(element)置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD .

小黑屋的黑小子的博客 904

[数据结构篇]深入了解java集合框架

文章目录java集合框架简单介绍集合框架一览图java集合框架的优点和作用基本关系说明collection接口说明collection接口的一些常用方法Map接口说明Map接口的一些常用方法 前言:java语法基础,博主已经更完了,接下来就要进入数据结构这新的篇章了,紧跟博主,从此让数据结构变得简单,让你爱上数据结构。 java集合框架简单介绍 Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在java.util 包下的一组接口 inter

qq_54883034的博客 906

Java中的集合框架:理解Java中的数据结构和集合

数组:Java中的数组是一个动态数组,它可以通过创建新的数组对象来动态地增加或删除元素。数组可以使用[]notation来访问和操作元素,而不需要使用new关键字来创建新对象。链表:Java中的链表是一种线性数据结构,它由一组元素组成,每个元素都有一个指向下一个元素的引用。可以使用List接口来创建一个链表,而不需要显式地创建和维护元素对象。堆:Java中的堆是一种非线性数据结构,它通过在内存中创建一个栈来存储元素。堆可以使用Queue接口来创建一个堆,而不需要显式地创建和维护元素对象。

AI天才研究院 1万+

【java中的集合框架】学习接触java中的集合,走上学习数据结构道路

【数据结构】学习接触java中的集合,走上学习数据结构道路

程序员良辰 563

了解集合与数据结构(java)

java会把一些数据结构封装起来,你想要一个链表, java里面有一个类专门表示链表, 你想要一棵树, java中有一个结构表示数, 这就叫做集合, C++里面叫做STL.既然java帮我们实现好了, 我们为什么还要学习呢?我们要知其然还要知其所以然, 这样才算真正学会了, 否则只能算是一知半解.

weixin_74235506的博客 311

常用集合与数据结构:深入解析Java集合框架与常见数据结构的实现与应用

Java集合框架是一个标准的集合类库,它提供了不同的数据结构实现,并且统一了它们的接口。Collection接口:是所有集合类的根接口,定义了集合的基本操作。List接口(有序集合,支持重复元素)Set接口(无序集合,不支持重复元素)Queue接口(队列,遵循先进先出原则)Map接口:与Collection不同,Map存储的是键值对(key-value),用于存储映射关系。Java集合框架的实现类种类繁多,其中最常见的有ArrayListLinkedListHashSetTreeSet。

一碗黄焖鸡三碗米饭的博客 759

Java 集合与数据结构

Java集合与数据结构

编程开发相关技术学习 1530
上一篇: 红黑二叉树的漫画讲解(轻松理解红黑二叉树原理)
下一篇: @ControllerAdvice注解实现全局自定义异常(简单demo)
like_java_
博客等级 码龄9年 54粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值