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

总览 Java 容器--集合框架的体系结构

前言

我们在讲 Java 的数据类型的时候,单独介绍过数组,数组也确实是开发程序中常用的内存类型之一,不过 Java 内置的数组限制颇多,所以此后扩展出了List这种结构,与之类似的Set、Queue 这些内存中的容器都被放在了 Collection 类族下,加之另一种代表常用的数据结构 Map 类族,这些聚合到一起构成了 Java 中集合框架的整个体系。

上面说的这些都是同步容器,费线程安全,后来 Java 又引入了并发容器,不过那些内容属于 J.U.C ,等讲到并发章节了我们再涉及。本文内容偏理论,后面会有三节专门介绍List、Set、Map 的使用和他们提高开发效率的常用操作总结,本文大纲如下:

集合框架的体系介绍

Java 的集合框架由两大类族组成,Collection 和 Map。

顾名思义,集合(Collection)代表一组对象。 Java 集合框架由一组接口和类组成,这些接口和类有助于处理不同类型的集合,例如 List 、Set、Map、Stack 和 Queue 等。

在我们需要处理同构和异构对象集合的地方,Java 提供现成的集合类解决了许多非常常见的问题。常见操作涉及添加、删除、更新、排序、搜索和更复杂的算法,这些集合类为使用 Collections API 的所有此类操作提供非常透明的支持。

下图是集合框架的体系结构总览

这个图里面总体地展示出了集合框架的每一个接口、抽象类和具体类,一开始看会觉得眼花缭乱,不知如何看起。

集合框架核心接口介绍

通过先梳理核心接口,可以更好地理解集合框架,所有的集合类都是通过实现这些接口提供具体的功能。

下图展示了集合框架中的核心接口

核心接口主要包括 Collection 和 Map 两种,Collection 表示存储着对象的集合,而 Map 表示存储着键值对的映射表。

Collection

Collection 接口是层次结构的根接口。 Collection 接口定义了具体集合类必须支持的所有通用方法(或抛出 UnsupportedOperationException)。它扩展了 Iterable 接口,增加了对使用“for-each loop”语句迭代集合元素的支持。

Collection interface 定义的方法如下,都是关于集合的通用方法

所有其他集合接口和类(Map 除外)都扩展或实现了Collection interface。例如,List、 Set 接口都继承了 Collection Interface。

List

List 表示元素的有序集合。使用列表,我们可以通过它们的整数索引(列表中的位置)访问元素,并在列表中搜索元素。跟数组一样,列表的索引从 0 开始。 Java 中最常用的 List 实现类,是 – ArrayList、CopyOnWriteArrayList、LinkedList、Stack 和 Vector。

Set

Set 表示无重复元素的集合, Set 接口不保证以任何可预测的顺序返回元素,其子接口 SortedSet 提供元素以自然顺序排序或者以创建时提供的 Comparator 排序元素的能力。

Queue

Queue 接口表示队列这种数据结构,队列旨在将元素插入队列的末尾,并从队列的开头删除元素。这类似于超市中排队的工作方式。

Deque

Deque 接口表示一个双端队列,这意味着可以在队列的两端添加和删除元素。 Deque 这个名字是双端队列的缩写。 Deque 这个词的发音是“deck”——就像一副牌的“deck”。 因为您可以从 Java Deque 的两端入队和出队,所以可以将 Deque 用作队列和堆栈。 Deque 接口扩展了 Queue 接口,所以可以在使用 Deque 时使用所有 Queue 接口里的方法。 Deque 接口没有扩展 Java Stack 接口,但 Deque 接口定义了一些方法,使我们能够执行通常在堆栈上执行的操作(push、peek、pop)。

Map

Map 接口使我们能够将数据存储在键值对中(键是不可变的)。Map 中不能包含重复的键,每个键只能映射到一个值。 Map 接口提供了三个集合视图,允许将 Map 的内容视为一组键、一组值或一组键值映射。一些 Map 实现类,如 TreeMap 类,对它们的顺序做出特定保证,其他的,比如 HashMap 类则没有任何顺序上的保证。

SortedMap

SortedMap 接口是 Map 接口的扩展,表示一个键被排序的 Map。因此,可以按排序顺序迭代存储在SortedMap 中的键,而不是在普通 Map 中迭代它们的那种随机顺序。上面说的 TreeMap 类就是实现的SortedMap 接口。

总结

这里只是把Java 集合框架的体系结构和核心接口做了介绍,让我们集合框架里提供了哪些接口,以及它们主要的实现类,给后续的学习提供一个指导方向,后面会在深入学习每种接口它们经常被用到的实现类。

相关文章:

总览 Java 容器--集合框架的体系结构

前言 我们在讲 Java 的数据类型的时候,单独介绍过数组,数组也确实是开发程序中常用的内存类型之一,不过 Java 内置的数组限制颇多,所以此后扩展出了List这种结构,与之类似的Set、Queue 这些内存中的容器都被放在了 Co…...

即便考分很好也不予录取的研究生复试红线,都是原则性问题

在浙大研究生招生录取政策文件中有这么一句话:坚持“按需招生、全面衡量、择优录取、宁缺毋滥”的原则,以提高人才选拔质量为核心,在确保安全性、公平性和科学性的基础上,做到统筹兼顾、精准施策、严格管理。字字体现出研究生招生…...

Android java创建子线程的几种方法

1.新建一个类继承自Thread,并重写run()方法,并在里面编写耗时逻辑。 1 2 3 4 5 6 7 class ThreadTest extends Thread { Override public void run() { //具体的耗时逻辑代码 } } new ThreadTest().st…...

UVa 11212 Editing a Book 编辑书稿 IDA* Iterative Deepening A Star 迭代加深搜剪枝

题目链接&#xff1a;Editing a Book 题目描述&#xff1a; 给定nnn个(1<n<10)1<n<10)1<n<10)数字&#xff0c;数字分别是1,2,3,...,n1, 2, 3, ...,n1,2,3,...,n&#xff0c;但是顺序是打乱的&#xff0c;你可以选择一个索引区间的数字进行剪切操作。问最少进…...

第一章:unity性能优化之内存优化

目录 前言 unity性能优化之内存的优化 一、unity Analysis工具的使用。 二、内存优化方法 1、设置和压缩图片 2、图片格式 3、动画文件 4、模型 5、RenderTexture&#xff08;RT&#xff09; 6、分辨率 7、资源的重复利用 8、shader优化 9、对bundle进行良好的管…...

2023年家族办公室研究报告

第一章 概况 家族办公室最早起源于古罗马时期的大“Domus”&#xff08;家族主管&#xff09;以及中世纪时期的大“Domo”&#xff08;总管家&#xff09;。现代意义上的家族办公室出现于19世纪中叶&#xff0c;一些抓住产业革命机会的大亨将金融专家、法律专家和财务专家集合…...

Typescript快速入门

Typescript快速入门第一章 快速入门0、TypeScript简介1、TypeScript 开发环境搭建2、基本类型3、编译选项4、webpack5、Babel第二章&#xff1a;面向对象0、面向对象简介1、类&#xff08;class&#xff09;2、面向对象的特点3、接口&#xff08;Interface&#xff09;4、泛型&…...

如何激励你的内容团队产出更好的创意

对于一个品牌而言&#xff0c;如何创造吸引受众并对受众有价值内容是十分关键的。随着市场数字化的推进&#xff0c;优质的创意和内容输出对一个品牌在市场中有着深远的影响。对于很多内容策划和创作者来说&#xff0c;不断地产出高质量有创意的内容是一件非常有挑战性的事情。…...

机械设备管理软件如何选择?机械设备管理软件哪家好?

随着信息化技术的进步与智能制造的发展趋势&#xff0c;很多机械设备制造企业也在一直探寻适合自己的数字化管理转型之路&#xff0c;而企业上ERP管理软件又是实现数字化管理的前提&#xff0c;机械设备管理软件对于企业来说就是关键一环。机械设备管理软件如何选择&#xff1f…...

深入浅出带你学习shiro-550漏洞

//发点去年存货 前言 apache shiro是一个java安全框架&#xff0c;作用是提供身份验证&#xff0c;Apache Shiro框架提供了一个Rememberme的功能,存储在cookie里面的Key里面&#xff0c;攻击者可以使用Shiro的默认密钥构造恶意序列化对象进行编码来伪造用户的 Cookie&#xf…...

项目(今日指数之环境搭建)

一 项目架构1.1 今日指数技术选型【1】前端技术【2】后端技术栈【3】整体概览1.2 核心业务介绍【1】业务结构预览【2】业务结构预览1.定时任务调度服务XXL-JOB通过RestTemplate多线程动态拉去股票接口数据&#xff0c;刷入数据库&#xff1b; 2.国内指数服务 3.板块指数服务 4.…...

PCL 基于投影点密度的建筑物立面提取

目录 一、算法原理1、投影密度理论及方法2、参考文献二、代码实现三、结果展示一、算法原理 1、投影密度理论及方法 将3维坐标点直接垂直投影到水平面上或者将 Z Z Z 值取任意常数,统计和计算水平面任意位置处所含投影点的个数记为...

DDD 参考工程架构

1 背景 不同团队落地DDD所采取的应用架构风格可能不同&#xff0c;并没有统一的、标准的DDD工程架构。有些团队可能遵循经典的DDD四层架构&#xff0c;或改进的DDD四层架构&#xff0c;有些团队可能综合考虑分层架构、整洁架构、六边形架构等多种架构风格&#xff0c;有些在实…...

重建,是2023年的关键词

作者&#xff1a;俞敏洪 来源&#xff1a;老俞闲话&#xff08;ID&#xff1a;laoyuxianhua&#xff09; 01 重建&#xff0c;是2023年的关键词 1.重建&#xff0c;是2023年的关键词 2023年&#xff0c;以一种奇特的方式来临。 之所以说奇特&#xff0c;是因为我们谁都没有…...

动手写操作系统-00-环境搭建以及资料收集

文章目录 动手写操作系统内核目标编本教程适合什么样的人?一些简单的要求操作系统的功能环境搭建参考文档:动手写操作系统内核 一直以来想学习linux操作系统,读了很多关于操作系统的书籍,也想自己动手写个OS 目标编 编写一个操作系统内核;能正常的运行自己编写的OS本教程适合…...

【scipy.sparse包】Python稀疏矩阵详解

【scipy.sparse包】Python稀疏矩阵 文章目录【scipy.sparse包】Python稀疏矩阵1. 前言2. 导入包3. 稀疏矩阵总览4. 稀疏矩阵详细介绍4.1 coo_matrix4.2 dok_matrix4.3 lil_matrix4.4 dia_matrix4.5 csc_matrix & csr_matrix4.6 bsr_matrix5. 稀疏矩阵的存取5.1 用save_npz保…...

从写下第1个脚本到年薪30W,我的自动化测试心路历程

我希望我的故事能够激励现在的软件测试人&#xff0c;尤其是还坚持在做“点点点”的测试人。 你可能会有疑问&#xff1a;“我也能做到这一点的可能性有多大&#xff1f;”因此&#xff0c;我会尽量把自己做决定和思考的过程讲得更具体一些&#xff0c;并尽量体现更多细节。 …...

JAVA八股、JAVA面经

还有三天面一个JAVA软件开发岗&#xff0c;之前完全没学过JAVA&#xff0c;整理一些面经...... 大佬整理的&#xff1a;Java面试必备八股文_-半度的博客-CSDN博客 另JAVA学习资料&#xff1a;Java | CS-Notes Java 基础Java 容器Java 并发Java 虚拟机Java IO目录 int和Inte…...

GAN系列基础知识

原始值函数 原始GAN的值函数是 minGmaxDV(D,G)Ex∼pdata(x)[logD(x)]Ez∼pz(z)[log(1−D(G(z)))]min_Gmax_DV(D,G) E_{x \sim p_{data}(x)}[logD(x)]E_{z \sim p_{z}(z)} [log(1-D(G(z)))]minG​maxD​V(D,G)Ex∼pdata​(x)​[logD(x)]Ez∼pz​(z)​[log(1−D(G(z)))] 其中Ex…...

Linux/CenterOS 7.9配置汉化gitlab服务器

1.安装gitlab的依赖项 yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python2.启动postfix&#xff0c;并设置为开机启动 systemctl start postfixsystemctl enable postfix3.防火墙和selinux的设置 setenforce 0systemctl stop fire…...

山洪灾害监测预警平台 山洪灾害监测预警系统解决方案 以人为本 科学防御

平升电子山洪灾害监测预警平台 山洪灾害监测预警系统解决方案&#xff0c;集信息采集、传输、分析和预警等功能于一体&#xff0c;实现预警信息及时、准确地上传下达&#xff0c;提升监测预警能力&#xff0c;使可能受灾区域能够及时采取措施&#xff0c;最大程度减少人员伤亡和…...

The Number Of ThreadPoolExecutor

序言整理下Java 线程池中线程数量如何设置的依据巨人肩膀:https://blog.csdn.net/weilaizhixing007/article/details/125955693https://blog.csdn.net/yuyan_jia/article/details/120298564#:~:text%E4%B8%80%E4%B8%AA%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%A4%84%E7%90%86%E8%AE%A1,…...

Linux(Linux各目录结构详解)

我们知道Linux系统是一个文件系统&#xff0c;它的文件系统就类似windows系统下的磁盘文件系统。 我们连接上一台linux系统的服务器。 输入命令 &#xff1a; ls / 我们可以看到 linux系统的根目录下有这些目录 bin boot data dev etc hbr home lib lib64 lostfoun…...

UART通讯简介

UART全称Universal AsynchronousReceiver/Transmitter&#xff0c;通用异步收发传输器。 一、工作原理 和其它串口一样&#xff0c;数据按照二进制从低位到高位一位一位的传输&#xff0c;能将要传输的数据在串行通信与并行通信之间加以转换&#xff0c;能够灵活地与外部设备进…...

80 90后表示真干不过,部门新来的00后已经把我卷奔溃了,不想干了····

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;刚开年我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 …...

Python中2.x 与 3​​.x 版本区别?

Python 的 3​​.0 版本&#xff0c;常被称为 Python 3000&#xff0c;或简称 Py3k。相对于 Python 的早期版本&#xff0c;这是一个较大的升级。 为了不带入过多的累赘&#xff0c;Python 3.0 在设计的时候没有考虑向下相容。 许多针对早期 Python 版本设计的程式都无法在 P…...

性能指南笔记一

全面的性能 1.好处和效率之间的权衡在增加程序特性的过程 2.数据库永远是瓶颈&#xff0c;分布式系统的整体性能问题 我们当前的性能处于什么百分位&#xff1f; 是不是整体的性能属于下降的&#xff1f; 一开始就考虑可能性很小的性能问题&#xff1f; 3.吞吐量测试 TPS 每秒…...

es数据导入导出

使用elasticdump导入导出数据 一、安装elasticdump 终端中输入 1 npm install elasticdump -g -g表示全局可用&#xff0c;直接在终端输入 elasticdump --version&#xff0c;出现版本信息即表示安装成功&#xff0c;如下 1 2 C:\Users\T470s>elasticdump --version 6.3.3 …...

Python3入门教程||Python3 字符串||Python3 列表

Python3 字符串字符串&#xff08;string&#xff0c;简写为str&#xff09;是 Python 中最常用的数据类型之一。我们可以使用引号( 或 " )来创建字符串。创建字符串很简单&#xff0c;只要为变量分配一个值即可。例如&#xff1a;var1 Hello World!var2 "W3Cscho…...

API 的安全性

大家好。今天聊一个很重要但是大部分人不重视的API安全问题。api固有的范围和风险意味着它们需要一种不同的安全方法。应用程序编程接口(api)是现代应用程序的构建模块&#xff0c;它们的使用正在以惊人的速度增长。然而&#xff0c;随着使用的增加&#xff0c;风险也会增加。。…...

四川酒店网站建设/google推广妙招

在前面的文章中&#xff0c;我们了解CoreData据是什么。本文我们将深入到Core Data框架的内部&#xff0c;掌握一下Core Data Stack的重要组成部分 managed object modelmanaged object contextpersistent store coordinatorJietu20200407-1932362x.jpg文章推荐 SwiftUI CoreD…...

求网页设计与网站建设/慈溪seo排名

slf4j、log4j、logback的关系 slf4j译为简单日志门面&#xff0c;是日志框架的抽象,实现了日志框架一些通用的api&#xff0c;而log4j和logback是众多日志框架中的几种。 log4j和logback可以单独的使用&#xff0c;也可以绑定slf4j一起使用。 单独使用。分别调用框架自己的方…...

wordpress大学 视频教程/360收录

谢邀.如果你们有RabbitMQ的构架和经验, 实现这个很方便rabbitmq 消息的消费端 channel 可以设置 prefetch5, 即最多同时处理5条消息rabbitmq 还有完善的ack机制, 即消息回执(该消息已正确处理完毕, 给我下条消息吧)而且, 不会堵塞你当前PHP的进程, 后台(消费worker)会以5个并发…...

扬中做网站/网站有吗免费的

相信大家开始玩gitlabjenkins的时候对着两个工具有肯定有一定了解&#xff0c;我就不做详细解释了&#xff0c;下面就跟大家简单的说下gitlab&#xff0c;jenkins之间工作关系&#xff1a; GitLab是一个代码仓库&#xff0c;用来管理代码。Jenkins是一个自动化服务器&#xff0…...

莱芜融媒体中心网站/百度搜索引擎营销如何实现

在发展工业物联网 (IoT) 以及满足相关的工业传感器无线连网需求方面&#xff0c;已经做了很多。不过&#xff0c;工业设备及应用的网络需求与家用环境完全不同&#xff0c;可靠性和安全性是高居工业应用要求的榜首。本文重点讨论特定于工业无线传感器网络的一些关键网络要求。 …...

政府网站设计要求/产品软文代写

(1)static static关键字&#xff1a;静态。 注意&#xff1a;静态成员在类中&#xff0c;只有一份。非静态成员在对象中、有多少个对象、就有多少分成员。 (2)final final修饰变量&#xff1a;不能被更改。 final修饰方法&#xff1a;不能被覆盖。 final修饰类&#xff1a…...