您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

Java 集合框架超详细!

时间:2023-10-09 12:31:59  来源:今日头条  作者:微风01
JCF是指一个数据集接口框架,它统称为 Collection 和 Map 接口。一组数据被定义为 Collection ,它扩展了 Iterable 接口。Iterable 实现了一个接口结构,允许访问属于集合的元素。This 的访问被定义为通过 Iterator 访问。Collection 提供一维数据管理。

Java 集合框架超详细!

简介

JAVA 提供了用于管理和操作数据的接口。

这称为 Java 集合框架 (JCF)。

由于它根据要存储和管理的数据的类型和特征提供各种形式和实现,

让我们根据需要的情况应用和使用它。

JCF

Java 集合框架超详细!

JCF是指一个数据集接口框架,它统称为 Collection 和 Map 接口。

一组数据被定义为 Collection ,它扩展了 Iterable 接口。

Iterable 实现了一个接口结构,允许访问属于集合的元素。

this 的访问被定义为通过 Iterator 访问。

Collection 提供一维数据管理。

具有代表性的Collection实现接口如下:

List :保证顺序,不保证唯一性(即可能出现重复)。

Queue:实现了一个通用的队列类型结构。

Set :不保证顺序,但保证唯一性(不重复)。

Map: 具有二维(键值)结构。

List

一个索引的、有序的集合。

典型的实现类是:

  • ArrayList

每个数据都附有索引(顺序),通过它可以快速访问。

但是,在删除或插入中间数据的情况下,整个数据结构都会被修改。

因此,内存效率低下。

  • LinkedList

为每个数据生成一个点,并使用该点组成每个数据。

当删除或插入发生时,内存效率低下最小化,但搜索数据时时间很慢。

  • Vector

线程安全得到保证,在访问线程时通过加锁来保证线程同步。

它用于保证在多线程环境中的稳定值。

  • Stack

这是一个典型队列结构的数据结构。

Set

是一种不保证顺序,保证唯一性的数据结构。

也就是说,它是一个不重叠的无序数据结构。

HashSet : 最纯粹的集合数据结构,完全随机排序。

通过覆盖equals和hashCode,区分对象,从根本上防止重复存储。

LinkedHashSet:这是一个Set数据结构,按照输入顺序存储数据。

它继承并实现了HashSet,按插入顺序管理数据。

TreeSet:是一种内部按升序排序的Set数据结构。

添加和删除数据需要时间,但搜索和排序非常好(当然因为它是树结构...)

Map

它是一种以键值格式以二维形式管理数据的数据结构。

导入数据时,一种序列是键,它所在的列是值,所以你可以把它看成是一个即时的、动态的小型数据库。

基本上不保证数据标识符Key的顺序。

  • HashMap:是一种纯Map数据结构,数据以完全随机的顺序存储。
  • TreeMap:它是一种Map数据结构,其中的键在内部进行了排序。

插入删除操作速度快,特点是自动排序。

  • HashTable:线程安全的同步方法组合。

因此,它是一种用于在多线程环境下保证稳定值的数据结构。

  • LinkedHashMap:它是一种Map数据结构,按照输入的顺序存储数据。

HashMap 是随机输出和有序结构,而 LinkedHashMap 保持插入顺序。

Queue

它是一种数据结构,对应于队列数据结构的一般概念。

从尾巴到超市结账的方法(排队)

计算方式与头部(出队)结构相同。

  • AbstractQueue:最纯粹的队列数据结构。

它是第一个为优先级队列构造的队列对象,允许将其声明和实现为原始队列。

与一般通过中间数据结构的其他数据结构不同,它实现了 AbstractCollection 类,这是 Collection 接口的抽象类。

  • LinkedList:这是一个使用链表实现的队列数据结构。

这是一个用于实现通用队列的实现类。

  • ArrayDeque:这是一个作为甲板数据结构实现的队列数据结构。

可以在前端(head)和尾部(tAIl)同时实现出队(删除)和入队(插入)操作。

  • PriorityQueue:这是一个优先级队列数据结构。

通过为每个数据实现优先级来排队处理任务

  • BlockingQueue:这是为确保线程安全而实现的数据结构。

如果两个线程同时访问出队任务,就会出现异常。

为了解决这个问题,通过 Concurrent 包实现并提供了阻塞的概念。

它通过线程等待通用队列的 put、offer、take、poll、peek 来工作。

换句话说,如果队列在条目之间饱和或为空,或者如果另一个线程正在访问它,则线程等待并在它被释放时执行命令。

特别是,可以使用一种称为 drainTo(Collection) 的方法,放入该集合的所有元素 (c)

可以使用下面两种来实现:

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Deque(双端队列)

扩展 Queue 接口的概念。

一个普通的队列可以从Head取数据(dequeue),从tail放数据(enqueue)。

实现方式:

  • linkedList:基于 LinkedList 的索引数据结构。

它是一种允许基本甲板构造的实现。

  • ArrayDeque:这是一种用于构建索引的数据结构。

此实现由 Array 支持,因此非常高效,因为它会立即移动而无需额外的内存引用。

  • LinkedBlockingDeque

提供允许单个线程一次只能访问一个(阻塞)的功能。

  • ConcurrentLinkedDeque:保证并行线程安全的索引结构。

正如Concurrent这个词所说的那样,它是一种保证ThreadSafe的保证数据结构。

由于是Linked数据结构,所以具有Linked的大部分优点和缺点。

Stack

它是一种实现常用栈概念的数据结构。

既然是继承了遗留的Vector构建的数据结构,那么Thread Safe自然是有保证的,

由于并发访问线程固定为单一数据结构,不适合作为多线程环境下的数据结构。

  • Stack:这是一种常用的栈数据结构。

堆中使用的概念被实现为方法。

Iterator(迭代器)

Iterator 是一个接口,它指定了一个可访问由 Collection 扩展的 Iterable 的接口。

该实现可以访问 Collection 并检索其元素。

Iterable(可迭代对象)

简单来说,For语句可以操作的数据结构是Iterable数据结构的一种实现。

换句话说,如果目标数据可以通过迭代(for,while)访问,它扩展了Iterable。

  • 任何 Iterable 扩展接口实现

当然...扩展 Iterable 的实现是 Iterable 的目标。

总结

以上内容是很基础的集合知识,帮助我们平时开发的时候更正确的去使用集合结构以及避免BUG困扰。这些知识需要牢记,值得反复查阅。



Tags:框架   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  Search: 框架  点击:(8)  评论:(0)  加入收藏
Htmx,它到底是框架还是库?
在最近的前端开发技术的探讨中,htmx经常成为热议的话题。一些人批评它,认为尽管htmx批评现代前端框架过于复杂,但它自己却似乎也是一个复杂的框架。这种看法值得我们深入思考。...【详细内容】
2024-03-28  Search: 框架  点击:(16)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  Search: 框架  点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  Search: 框架  点击:(39)  评论:(0)  加入收藏
Go Gin框架实现优雅地重启和停止
在Web应用程序中,有时候我们需要重启或停止服务器,无论是因为更新代码还是进行例行维护。在这种情景下,我们需要保证应用程序的可用性和数据的一致性。这就需要优雅地关闭和重...【详细内容】
2024-01-30  Search: 框架  点击:(67)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  Search: 框架  点击:(67)  评论:(0)  加入收藏
OpenHarmony - 基于ArkUI框架实现日历应用
前言对于刚刚接触OpenHarmony应用开发的开发者,最快的入门方式就是开发一个简单的应用,下面记录了一个日历应用的开发过程,通过日历应用的开发,来熟悉基本图形的绘制,ArkUI的组件...【详细内容】
2024-01-16  Search: 框架  点击:(54)  评论:(0)  加入收藏
阿里“AI替换万物”框架火爆社区,网友:偶像不需要真人了?
白交 发自 凹非寺量子位 | 公众号 QbitAIReplace Anything as you want。现在只需框住你需要保留的区域,AI就可以替换万物了!比如让霉霉穿上中国旗袍,结果发饰、服装、背景等各...【详细内容】
2024-01-15  Search: 框架  点击:(66)  评论:(0)  加入收藏
分布式事务框架选择与实践
分布式事务是处理跨多个服务的原子操作的关键概念,而选择适合应用场景的框架对于确保事务一致性至关重要。以下是几个常见的分布式事务框架,并讨论它们的使用和实践。1. XA协...【详细内容】
2024-01-05  Search: 框架  点击:(96)  评论:(0)  加入收藏
JavaScript前端框架2024年展望
Angular、Next.js、React和Solid的维护者和创作者们展望2024年,分享了他们计划中的改进。译自2024 Predictions by JavaScript Frontend Framework Maintainers,作者 Loraine...【详细内容】
2024-01-05  Search: 框架  点击:(89)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(52)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(67)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(84)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(86)  评论:(0)  加入收藏
站内最新
站内热门
站内头条