【用Java学习数据结构系列】探索Java集合框架的无尽秘密pro

news2024/11/24 21:07:57

看到这句话的时候证明:此刻你我都在努力
加油陌生人
在这里插入图片描述

个人主页:Gu Gu Study
专栏:用Java学习数据结构系列
喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹


喜欢的话可以点个赞谢谢了。
作者:小闭


前言

与C语言学习数据结构不同,Java在数据结构的学习和使用上我们必须要了解一下Java的集合框架。
Java中的顺序表,链表,栈,队列,二叉树等,Java都是已经写好的了,其中队列是一个接口。
那么既然Java已经实现了这些数据结构,那么我们只需要认识和会使用这些接口和类就好,那么想认识这些数据结构之前,我们必须要先了解一下Java的集合框架。


什么是集合框架


集合框架是用于表示和操作集合的统一体系结构。所有集合框架都包含以下内容:

  • 接口: 这些是表示集合的抽象数据类型。接口允许独立于其表示的细节来操作集合。在面向对象的语言中,接口通常形成一个层次结构。

  • 实现: 这些是集合接口的具体实现。从本质上讲,它们是可重用的数据结构。

  • 算法: 这些是对实现集合接口的对象执行有用计算(如搜索和排序)的方法。这些算法被称为多态算法:也就是说,相同的方法可以用于适当集合接口的许多不同实现。从本质上讲,算法是可重用的功能。

每个接口都要要实现的方法,当然上图中显示的都是集合框架中的接口。可能有人会问没见到要学习的顺序表和链表之类的东西啊。往下看:

  1. ArrayList(顺序表)

  2. LinkedList(链表)

  3. Vector

  4. Stack(栈)

  5. CopyOnWriteArrayList

这五个类都是实现了这个框架中的List接口。也就是说List中的方法在这些个类中都会是实现。
其中

Java 集合框架的优点

Java 集合框架具有以下优点:

  • 减少编程工作量: 通过提供有用的数据结构和算法,集合框架使您可以专注于程序的重要部分,而不是专注于使其运行所需的低级"管道"。通过促进不相关的
    API 之间的互操作性,爪哇岛
    集合框架使您无需编写适配器对象或转换代码来连接 API。

  • 提高程序速度和质量: 此集合框架提供了有用数据结构和算法的高性能、高质量实现。每个接口的各种实现都是可以互换的,因此可以通过切换集合实现来轻松调整程序。因为您摆脱了编写自己的数据结构的苦差事,所以您将有更多时间投入到提高程序的质量和性能上。

  • 允许在不相关的 API 之间实现互操作性: 集合接口是 API
    来回传递集合的白话。如果我的网络管理 API
    提供了节点名称的集合,并且您的 GUI
    工具包需要列标题的集合,那么我们的 API
    将无缝互操作,即使它们是独立编写的。

  • 减少学习和使用新 API 的工作量: 许多 API
    自然而然地在输入上获取集合,并将它们作为输出提供。过去,每个这样的
    API 都有一个小的子 API,专门用于操作其集合。这些临时集合子 API
    之间几乎没有一致性,因此您必须从头开始学习每个子
    API,并且在使用它们时很容易出错。随着标准集合接口的出现,问题消失了。

  • 减少设计新 API
    的工作量:
    这是前一个优势的另一面。设计人员和实现者不必在每次创建依赖于集合的
    API 时都重新发明轮子;相反,他们可以使用标准集合接口。

  • 促进软件重用: 符合标准集合接口的新数据结构本质上是可重用的。对实现这些接口的对象进行操作的新算法也是如此。

上面是官方文档的介绍,看不太懂很正常,毕竟我们还没学到那个程度,包括我也不是完全理解的。


最后奉上比特的一张集合框架的接口和类的关系图

认识Collection

Java中的Collectionjava.util包下的一个根接口,它是Java集合框架的基础。Collection接口定义了所有单列集合(即只包含单一类型元素的集合)的基本操作。以下是Collection接口的一些详细解析:

基本概念

  • 单列集合Collection接口代表的集合只包含单一类型的元素。

  • 不可变性Collection接口本身是不可变的,即一旦集合被创建,其类型就不能改变。

子接口

Collection接口有两个主要的子接口:

  1. List:代表有序的集合,允许重复元素。如ArrayListLinkedList等。

  2. Set:代表不允许重复元素的集合,无特定顺序。如HashSetTreeSet等。

  3. Queue: 队列通常(但不一定)以
    FIFO(先进先出)方式对元素进行排序。例外情况包括优先级队列,它根据提供的比较器或元素的自然顺序对元素进行排序。无论使用何种排序,队列的头部都是通过调用
    or 来删除的元素。在 FIFO
    队列中,所有新元素都插入到队列的尾部。其他类型的队列可能使用不同的放置规则。每个实现都必须指定其排序属性

常用方法

Collection接口定义了以下一些基本操作:

  • add(E e):添加一个元素到集合中。

  • remove(Object o):从集合中移除一个元素。

  • contains(Object o):检查集合是否包含指定的元素。

  • size():返回集合中元素的数量。

  • isEmpty():检查集合是否为空。

  • toArray():返回包含集合中所有元素的数组。

  • iterator():返回一个迭代器,用于遍历集合中的元素。

迭代器(Iterator) {#迭代器iterator)}

Collection接口通过iterator()方法提供了一种遍历集合元素的方式。迭代器是一个对象,它允许程序逐个访问集合中的每个元素,而不需要关心集合的具体实现细节。

子接口的扩展方法

ListSet接口除了继承Collection的方法外,还提供了一些额外的方法来支持它们特定的行为:

  • List接口提供了插入、替换和访问特定位置元素的方法。

  • Set接口通常不提供对元素的直接访问,而是通过迭代器或Collection的通用方法来操作。

泛型

从Java
5开始,Collection及其子接口支持泛型,这意味着你可以指定集合中元素的类型,从而提高代码的类型安全性和重用性。

线程安全性

大多数Collection实现不是线程安全的。如果需要线程安全的集合,可以使用Collections.synchronizedCollection()方法包装一个集合,或者使用并发集合类,如ConcurrentHashMap的键集合。

选择适当的实现

选择适当的Collection实现对于性能至关重要。例如:

  • 使用ArrayList如果需要快速随机访问集合中的元素。

  • 使用LinkedList如果需要频繁地在集合中插入或删除元素。

  • 使用HashSet如果不需要保证元素的顺序,并且希望快速查找元素。

性能考虑

不同的Collection实现在不同操作下的性能表现不同。例如,ArrayList在随机访问方面表现更好,而LinkedList在插入和删除方面更高效。
Collection接口是Java集合框架的核心,提供了一种统一的方式来操作集合,无论它们的具体实现是什么。了解和合理使用Collection及其子接口可以大大提高Java程序的性能和可维护性。


好了通过这篇文章呢,相信你对集合框架有了一个基本的了解,其中更加深奥的知识需要你们更加努力的探索哦。
喜欢的话点个关注唔,之后会为大家继续更新这个系列。

好了通过这篇文章呢,相信你对集合框架有了一个基本的了解,其中更加深奥的知识需要你们更加努力的探索哦。
喜欢的话点个关注唔,之后会为大家继续更新这个系列。

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

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

相关文章

修改SpringBoot启动图标banner

方式一: 将图标文件命名为banner放在resources目录下 文本文件banner 图片banner 方式二:通过配置文件指定图标路径 指定文本图标:spring.banner.locationclasspath:相对于resources下的位置 ("classpath:"可以省略) 指定图片作为图标: sprin…

C语言——扫雷游戏

扫雷游戏通常是一个由方格组成的区域内进行的,其中随机分布着一定数量的地雷 。玩家的目标是通过点击方格来标记出所有地雷的位置,同时避免自己点到地雷而导致游戏失败。游戏开始时,玩家通常只能看到一部分方格,而其余的方格则需要…

消息框:tkinter.messagebox

文章目录 一、tkinter 简介二、tkinter 基础(部件 布局管理器)三、项目实战3.1、主循环:root.mainloop()3.2、手动摧毁窗口:root.destroy()3.3、布局管理器:pack3.4、布局管理器:grid3.5、布局管理器&…

【ML】transform 之 decoder 及其实现细节

【ML】transform 之 decoder 及其实现细节 1. decoder2. encoder 和decoder 之间是如何处理和传递讯息的?self-attention3. 查询(Query)、键(Key)、值(Value)是三个核心概念及其具体含义和计算方…

轻松应对大量订单:快递批量查询软件大揭秘

在日常生活和工作中,我们经常会遇到需要查询多个快递单号物流信息的情况,无论是电商卖家需要跟踪大量订单,还是消费者想要及时了解自己包裹的运输状态,手动逐一查询都显得既繁琐又低效。今天,我就向大家推荐一款效果非…

如何使用Alist:多网盘管理神器!一站式挂载、集成管理,支持WebDav

在日常生活中,我们或多或少会使用不同的网盘存储和处理各类文件,这往往导致我们的文件管理繁琐且效率低下。 Alist支持将多种不同的网盘服务集成到一个统一的界面中,让你能够轻松地挂载和管理所有文件。 通过Alist,你可以在一个界…

阿里发布“神笔马良版Sora”:寥寥数笔,动画自成

AI视频生成赛道风起云涌,国内外新颖的文生、图生视频产品层出不穷。在各大厂商的“内卷”之下,当下的视频生成模型各方面已经接近“以假乱真”的效果。例如,OpenAI 的 Sora 和国内的 Vidu、可灵等模型,通过利用 Diffusion Transfo…

structuredClone():JavaScript中深拷贝对象的最简单方法

前端岗位内推来了 深拷贝是传递或存储数据时的一项常规编程任务。 浅拷贝:只复制对象的第一层深拷贝:复制对象的所有层级 const obj { name: Tari, friends: [{ name: Messi }] };const shallowCopy { ...obj };const deepCopy dCopy(obj);console.lo…

C++——多态经典案例(二)制作饮品

案例:制作饮品的步骤是差不多一样的,假设都有四步,打开包装Open、煮水Boil、放杯子里面PutInCup、放佐料PutSomething、喝Drink 利用多态,制作茶和咖啡等饮品 分析:定义一个抽象类,纯虚函数包括Open、Boil…

C++(1):构造函数,复制函数和析构函数

引用 ref这里是对i起了一个别名 引用和指针区别区别1.引用直接绑定2.引用必须初始化 auyo a 10;自动匹配a的类型,但是初始化必须给值 内联函数放头文件 不传参形参有默认值 默认形参b有b后面的都必须有默认 函数重载:同名不同参(返回值不能作…

浅学 Pytorch

(一)Dataset Dataset 是一个抽象类,用于表示数据集。它封装了数据的加载和预处理逻辑,使得数据的读取和处理更加灵活和易于管理。在PyTorch中,torch.utils.data.Dataset 是一个基类,用户可以继承并实现自己…

软件渗透测试详细介绍,专业软件测评机构分享

随着信息技术的飞速发展,软件应用已成为我们生活和工作中不可或缺的一部分。然而,与此,信息安全问题也日益凸显,网络攻击的频繁发生让企业和用户面临前所未有的风险。为了更好地保护软件产品的安全性,渗透测试应运而生…

Mysql执行计划(上)

1、执行计划的概念 执行计划是什么:使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。 作用:分析你的查询语句或是表结构的性能瓶颈 语法:Explain SQL语句 执行计划输出内容介绍&#…

记录一次网关无响应的排查

1. 使用jstack pid > thread.txt 打印进 thread.txt 文件里 去观察线程的状态。 我发现,一个线程在经过 rateliter的prefilter后, 先是调用 consume方法,获取到锁。 接着在执行 jedis的 evalsha命令时 一直卡在socket.read()的状态。 发现jedis官…

【iOS】OC关键字总结及底层原理(上)

目录 线程安全相关的关键字atomic&nonatomic 作用域相关的关键字static、extern、const&auto 读写权限相关和指定方法名的关键字内存管理相关的关键字(或方法)1. 引用计数的存储SideTableretain方法源码分析release方法源码分析dealloc方法源码分…

无缝融入,即刻智能[4]:MaxKB知识库问答系统[进一步深度开发调试,完成基于API对话,基于ollama大模型本地部署等]

无缝融入,即刻智能[4]:MaxKB知识库问答系统[进一步深度开发调试,完成基于API对话,基于ollama大模型本地部署等] 1.简介 MaxKB(Max Knowledge Base)是一款基于 LLM 大语言模型的开源知识库问答系统, 1.1 产品优势 开箱即用:支持直接上传文档、自动爬取在线文档,支持文本…

计算机网络 6.3Internet组成6.4Internet地址

第三节 Internet组成 一、基本结构及特点 1.Internet结构类型:分层网络互联群体。 2.主要构成:①主干网;②中间层网;③底层网。 3.结构特点: ①对用户隐藏网间连接的底层节点。 ②不指定网络互联的拓扑结构。 ③…

【时时三省】(C语言基础)数组作为函数参数

山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 排序为升序-冒泡排序 冒泡排序的思想: 两两相邻的元素进行比较。并且可能得话需要交换 示例: 数组名 数组名是数组首元素的地址 但是有两个例外 1.sizeof(数组名)-数组名表示整个数组-计…

VMware虚拟机上网

一、VMware Network Adapter VMnet8配置 ①打开VMware软件:点击菜单栏→编辑→虚拟网络编辑器 ②点击NAT模式,使用管理员权限对子网IP和网关进行配置 ③子网IP和掩码就是这样,这里可以自行配置 ④点击上图中的NAT设置,配置网关 …

Rider中修改默认文件关联,自定义打开方式

问题描述 想用Qt designer打开.ui文件,但是在Rider中,IDE会默认通过text进行打开 解决方法 1,允许用户将特定的文件类型与一个应用程序关联起来 File -> Settings -> Editor -> File Types -> Recognized File Types下&…