集合体系架构图

本文详细介绍了Java集合框架中的ArrayList、LinkedList、HashSet等数据结构,探讨了它们的底层实现和适用场景,以及Map接口及其常见实现如HashMap和TreeMap的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java之集合体系架构图

 

 助记:集合类就像容器,现实生活中容器的功能,无非就是添加对象、删除对象、清空容器、判断集合是否为空等。

(一)Collection接口中的常用方法

(二)List接口常用方法
List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作集合的特有方法。

ArrayList & LinkedList
List接口的两个常见实现类为ArrayList和LinkedList,分别用动态数组和链表的方式实现了List接口。 可以认为ArrayList和LinkedList的方法在逻辑上完全一样, 只是在性能上有一定的差别。ArrayList更适合于随机访问而LinkedList更适合插入和删除。在性能要求不是特别苛刻的情形下可以忽略这个差别 。

ArrayList
ArrayList集合的底层是使用一个数组来保存元素,在增加或删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大量的增删操作。但是这种数组的结构允许程序通过索引的方式来访问元素,因此,使用 ArrayList集合查找元素很便捷。

LinkedList
LinkedList集合内部维护了一个双向循环链表,链表中的每一个元素都使用引用的方式来记住它的前一个元素和后一个元素,从而可以将所有的元素彼此连接起来。当插入一个新元素时,只需要修改元素之间的这种引用关系即可,删除一个节点也是如此。正因为这样的存储结构,所以LinkedList集合对于元素的增删操作具有很高的效率。

(三)Set
Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。

HashSet集合
HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。当向HashSet集合中添加一个对象时,首先会调用该对象的hashCode()方法来确定元素的存储位置,然后再调用对象的equals()方法来确保该位置没有重复元素。

(四)Queue
队列(Queue)是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式: 只能从线性表的一端添加(offer)元素,从另一端取出(poll)元素。

队列遵循先进先出(FIFO)的原则。

(五)Deque
Deque是Queue的子接口,定义了所谓的“双端队列”即从队列的两端分别可以入队(offer)和出队(poll)。 LinkedList实现了该接口。如果将Deque限制为只能从一端入队和出队,则可实现“栈”(Stack)的数据结构,对于栈而言, 入栈称为push,出栈称为pop。

栈遵循先进后出(FILO)的原则。

(六)Map
Map接口定义的集合又称之为查找表,用于存储所谓的“Key-Value”映射对。Key可以看成是Value的索引,作为Key的对象在集合中不可以重复.根据内部数据结构不同,Map接口有多种实现类,其中常用的有内部为hash表实现的HashMap和内部为排序二叉树实现的TreeMap。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值