【从零开始学习JAVA | 第二十三篇】集合体系结构

news2024/9/24 5:33:25

5443612af38f44a4824110f7382812f3.png

目录

前言:

单列集合:     

set与list的区别:

双列集合:

map的特点:

总结:


 

前言:

                JAVA中为我们提供了很多集合,这些集合都有自己很独特的特点,因此我们要学习所有的集合,但是在学习所有的集合之前,我们还是先为大家介绍一下JAVA的集合体系结构,这样有利于大家更好的理解整个JAVA集合框架。

整个集合其实都可以分为两大类:单列集合与双列集合

单列集合:     

23f2f8d0b19247fd84ff260292ee0ba5.png

Java中的单列集合指的是一种只包含一个元素的集合,也被称作为单元素集合或者是单值集合,单列集合一次只能添加一个元素。在Java中,单列集合主要有以下几种:

1. Singleton Set
Singleton Set是一种只包含一个元素的集合,并且该元素不允许为空。Singleton Set中只有一个元素,所以它的size()方法返回值为1。

示例代码:

Set<String> singletonSet = Collections.singleton("hello");

2. Singleton List
Singleton List也是一种只包含一个元素的集合,但是它是有序的,并可以包含重复元素。Singleton List中只有一个元素,所以它的size()方法返回值为1。

示例代码:

List<String> singletonList = Collections.singletonList("hello");

需要注意的是,Singleton集合是不可变的,即不能向其中添加或删除元素。如果需要添加或删除元素,需要创建一个新的集合对象并赋值。此外,Singleton集合的元素只能通过迭代器进行访问。

set与list的区别:

list和set是Java中两种常用的集合类型,它们的主要区别在于以下几个方面:

1. 元素顺序
list是有序集合,即它维护元素的插入顺序,并且可以根据元素的索引(即插入顺序)进行访问和操作。set是无序集合,它不维护元素的插入顺序,并且不能根据元素的索引进行访问和操作。
2. 元素的唯一性
list可以包含重复元素,即同一个元素可以出现多次;set元素是唯一的,即同一个元素只能出现一次。
3. 实现方式
list可以通过数组或链表实现;set可以通过哈希表或树结构实现。因此,list的访问速度较快,但是添加、删除元素和查找元素需要较长的时间;而set的添加、删除元素和查找元素速度较快(平均时间复杂度为O(1)),但是访问元素需要较长的时间(时间复杂度为O(n))

总之,如果需要维护元素的顺序、允许包含重复元素、并且需要根据索引进行访问和操作,应该使用list;如果需要保证元素的唯一性、不需要维护元素的顺序,并且查找、添加与删除操作的性能要求较高,应该使用set。

双列集合:

Java中的双列集合指的是一种包含两个元素的集合,它们可以存储类型不同的键值对,通常用于构建关联数组、映射等数据结构。在Java中,双列集合主要有以下几种:

1. Map
Map是一种键值对映射的集合,其中键和值都可以是任意类型的对象。Map中的键是唯一的,因此不能存在重复的键。常用的实现类包括HashMap、LinkedHashMap、TreeMap等。

示例代码:

Map<String, Integer> map = new HashMap<>();
map.put("Java", 100);
map.put("Python", 90);
map.put("C++", 80);

map常见的实现类: 

1. Hashtable
Hashtable是一种线程安全的键值对映射集合,与HashMap类似,但它的所有方法都是同步的。Hashtable也不允许键和值为空。Hashtable的实现方式是通过哈希表实现的。

示例代码:

Hashtable<String, Integer> hashtable = new Hashtable<>();
hashtable.put("Java", 100);
hashtable.put("Python", 90);
hashtable.put("C++", 80);

2. LinkedHashMap
LinkedHashMap是一种维护插入顺序的Map,它记录了元素的插入顺序,并可以按照插入顺序进行遍历。LinkedHashMap是通过哈希表和双向链表实现的。

示例代码:

Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("Java", 100);
linkedHashMap.put("Python", 90);
linkedHashMap.put("C++", 80);

3. TreeMap
TreeMap是一种按照键的自然顺序或者比较器顺序进行遍历的有序Map。默认情况下,TreeMap按照键的自然顺序进行遍历,如果需要自定义排序规则,可以通过实现Comparator接口实现。TreeMap是通过红黑树实现的。

示例代码:

Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Java", 100);
treeMap.put("Python", 90);
treeMap.put("C++", 80);

需要注意的是,Java中的双列集合都是基于Map接口实现的,因此它们都具有Map接口的基本方法,如put、get、containsKey等。在使用双列集合时,需要根据具体的使用场景和性能要求选择合适的实现类。

map的特点:

Map是一种键值对的数据结构,它的特点有以下几个:

1. 存储方式:Map 以键值对的形式来储存数据,即每个键都与一个值相关联。这种方式方便了数据的快速查找和访问,比如可以通过键快速获取对应的值。

2. 独一无二的键:Map 中的键是唯一的,即同一时刻只能存在一个与给定键相关联的值。如果插入的键已经存在,则新插入的值会覆盖旧值。

3. 无序性:Map 中的键值对是无序的,不像数组和列表那样有固定的顺序。我们可以根据键来进行查找和访问,而不关心它们在 Map 中的位置。

4. 可以存储不同类型的值:Map 中的键值对可以存储不同类型的数据,这使得 Map 成为存储和操作各种类型数据的理想数据结构。

5. 可以动态修改:Map 是一种动态数据结构,它可以根据需要进行插入、删除或修改键值对,这使得它非常灵活和实用。

总结:

        本文详细的介绍了单列集合与双列集合,为我们搭建了集合的一个基本的体系构架,后面我们也会一步一步的完善这些构架里面的内容。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

69e9169c980f43e0aad31ff9ada88a9c.png

 

 

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

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

相关文章

网络安全合规-网络安全工程师发展前景(三)

上海网络安全工程师工资按工作经验统计&#xff0c;其中应届毕业生工资5250&#xff0c;0-2年工资8910&#xff0c;3-5年工资11330&#xff0c;8-10年工资13500&#xff0c;6-7年工资16170&#xff0c;该数据仅供参考。 北京网络安全工程师工资按工作经验统计&#xff0c;其中…

python selenium 定位鼠标悬浮后的新弹窗数据

背景 最近需要获取网页上的标签数据&#xff0c;但是标签大于3个以后是隐藏的&#xff0c;需要鼠标hover上去才显示。如下图&#xff0c;图一是刚进来界面展示的&#xff0c;需要知道额外的7个标签则需要将鼠标移动到目标上面去。 但是比较尴尬的一个点是&#xff0c;当游览器打…

数据结构C语言版本(中)

第四章 串 串&#xff1a;限定数据元素类型的线性表。 应用实例&#xff1a; 编辑软件(本质上是字符串处理) 信息检索、病毒查找(字符串比较) 第一节 逻辑结构 一、定义 串是由字符组成的线性表。 STRING(D&#xff0c;S&#xff0c;P) D {ai| ai∈CHARACTER(字符集), i0,1…

Verilog基础之八、多路选择器实现

一、前言 选择器在FPGA中是基础的组成部分&#xff0c;英文全称为Multiplexer&#xff0c;为一个多输入单输出的结构。以器件xc7k480tffv1156为例&#xff0c;在slice中&#xff0c;也可以看到F7AMUX&#xff0c;F8MUX&#xff0c;这两个MUX都是二输入单输出的选择器。 二、工程…

【雕爷学编程】Arduino动手做(128)---2路I2C电平转换模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

VR虚拟现实技术为机械专业教学带来新思路

随着虚拟现实技术的发展&#xff0c;VR已经成为机械专业教学的一种新方式。它可以为学生提供更加生动、直观的学习体验&#xff0c;同时也可以帮助教师更好地进行教学和评估。以下是广州华锐互动总结的一些常见的应用场景&#xff1a; 模拟实验和操作&#xff1a;VR可以为学生提…

(UE4/5) PS中生成LUT进行UE4/5的色域颜色校正

整理自官方&#xff1a;使用虚幻引擎查找表&#xff08;LUT&#xff09;进行颜色校正 | 虚幻引擎5.2文档 (unrealengine.com) 一、Unreal Engine中截图 在UE4/5中截一张场景图&#xff08;比较有代表性的&#xff09; 然后&#xff0c;用这张图片&#xff1a;&#xff08;不要…

Qt使用事件(event)与定时器实现字幕滚动

目录 1、效果展示2、实现思路3、滚动窗口部件3.1、成员变量3.2、事件重写3.3、成员方法3.3、方法实现 1、效果展示 我们经常能够在外面看到那种滚动字幕&#xff0c;那么就拿qt来做一个吧。 2、实现思路 实现一个窗口部件&#xff0c;这个窗口部件显示了一串文本标语,它会每…

H3C-HCL-SE-“01-路由备份与链路聚合实验“

实验拓扑图&#xff1a; 实验需求&#xff1a; 1、按照图示配置 IP 地址&#xff0c;R3 上连接 192.168.X.X/24 4个业务网段 2、配置 RIPv2 协议使全网互通&#xff0c;R1 和 R3 的直连链路不运行 RIP 3、R1 上配置静态路由直接经过 R3 到达所有业务网段 4、R1 和 R2 上不允…

第八十五天学习记录:C++核心:内存分区模型

内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 1、代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理 2、全局区&#xff1a;存放全局变量和静态变量以及常量 3、栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数…

【雕爷学编程】Arduino动手做(129)---TTS文字转语音合成模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

python爬虫_requests入门指引

文章目录 ⭐前言⭐requests库&#x1f496; pip安装requests&#x1f496; requests get&#x1f496; requests post 结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于python的requests库用法。 该系列文章&#xff1a; python爬虫_基本数据类型 python爬虫…

Edge浏览器可以多开吗?

问答链接&#xff1a;Edge浏览器可以多开吗&#xff1f; 可以。 如果你的edge浏览器是默认路径安装的&#xff0c;那么打开命令提示符窗口输入以下两条命令即可启动一个数据完全隔离的edge浏览器。 mkdir C:\logs001 "C:\Program Files (x86)\Microsoft\Edge\Applicati…

shell [[]] 语法错误解决方式

错误如图&#xff1a; /linux/install.sh:行15: if [[ $contrainsha e *$contrainsname* ]] /linux/install.sh:行15: 条件表达式中有语法错误 附近有语法错误/linux/install.sh:行15: ]] [[]]语法 当[[ ]]判断expr成立时&#xff0c;退出状态为0&#xff0c;否则为非0值。…

STM32F103使用USART3/UART4乱码问题

源程序为USART1的配置&#xff0c;更改USART3/4相应寄存器测试&#xff0c;测试一直显示有规律乱码&#xff0c;收发不符。 void uart_init(u32 pclk,u32 bound) { float temp;u16 mantissa;u16 fraction; temp(float)(pclk*1000000)/(bound*16);//得到USARTDIVmantissa…

labview 公式节点转换(U16->S16)

问题&#xff1a;在和测力计通讯时&#xff0c;需要把读出的裸数据转化有符号整数 其它网友的文章可以进行转换 &#xff08;笔记&#xff09;labview各种进制转换&#xff08;通讯得到的负数补码转换成负数原码&#xff09;_labview数字间的进制转换_是孑然呀的博客-CSDN博客…

chatgpt赋能python:用Python计算AIC:一种常用的信息标准

用Python计算AIC&#xff1a;一种常用的信息标准 介绍 AIC&#xff08;赤池信息准则&#xff09;是一种用于模型选择的信息理论标准&#xff0c;旨在平衡模型复杂度和拟合准确度的权衡。在统计学和机器学习中&#xff0c;模型选择是一项关键任务&#xff0c;因为正确选择模型…

QT使用问题记录

VS中无法直接打开QT的Ui界面 需要确保安装上这个VS的QT扩展插件 还需要把QT的path添加到VS里面 这是添加好的 运行编译好的QT软件报 应用程序无法正常启动(0xc000007b)&#xff0c;需要把QT的路径添加到系统环境变量的path中哦 加上这个就可以了

【python 第三方库安装换源】

换源&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/其他国内第三方库的下载源地址&#xff1a; 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple/ 科技大学&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣&a…

4.用python写网络爬虫,并发下载

目录 前言 4.1 100万个网页 4.1.1 解析Alexa列表 4.2 串行爬虫 4.3 多 线程爬虫 4.3.1 线程和进程如何工作 4.3.2 实现 4.3.3 多进程爬虫 4.4性能 4.5 本章小结 前言 在之前的章节中&#xff0c;我们的爬虫都是串行下载网页的&#xff0c;只有前一次下载完成之后才会…