Java stack实现原理_Java集合包(四)——List实现类之LinkedList与Stack原理分析

本文详细介绍了Java中LinkedList作为堆栈、队列、双端队列的实现原理,强调其非线程安全及在特定场景下的高效性。LinkedList采用双向链表结构,支持高效顺序访问但随机访问效率较低。此外,文章对比了ArrayList在插入、查找上的性能差异。Stack作为线程安全的栈实现,基于Vector数组实现,提供了一系列栈操作方法,但在多线程环境下推荐使用LinkedBlockingDeque。
摘要由CSDN通过智能技术生成

一:LinkedList特征

1、LinkedList底层是一个双向链表,可以被当做 堆栈、队列、双端队列  来使用。【能且应该仅被作为 栈、队列、双端队列  来使用!】

双向链表,又称为“双向循环链表”,每个数据结点中都有两个引用,分别指向直接后继和直接前驱节点,可以理解为它是一个“首尾相接”的环形链表。

从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,从而可以从任意一个结点开始往后或者往前遍历完整个链表。

2、LinkedList的操作不是线程安全的,建议在单线程环境下使用。多线程中可以选择JUC并发包中的LinkedBlockingDeque。

3、因为底层是双向链表,那么它的顺序访问会[从表头开始迭代访问]非常高效,而随机访问[只查找某具体节点]效率比较低。

4、因为双向链表添加元素只是新增一个节点,延长链表而已,因此LinkedList 不存在容量不足的问题

二:LinkedList继承与实现关系

976d6a4acee7484b8ff8a8c69c224c0d.png

1、继承层次

java.lang.Object

↳ java.util.AbstractCollection↳ java.util.AbstractList↳ java.util.AbstractSequentialList↳ java.util.LinkedList

2、类定义与实现

public class LinkedList

extends AbstractSequentialList

implements List, Deque, Cloneable, java.io.Serializable {}

1)LinkedList 继承于AbstractSequentialList,AbstractSequentialList 实现了get(int index)、set(int index, E element)、add(int index, E element) 和 remove(int index)等方法,支持随机访问List。

2)LinkedList 实现 了 List 接口,因此具备了 队列操作的方法。

3)LinkedList 实现 了 Deque 接口,因此具备了 双端队列操作方法。

4)LinkedList 实现了Cloneable接口,即重写 clone(),支持克隆。

5)LinkedList 实现了java.io.Serializable接口,支持序列化。

三:LinkedList原理

LinkedList的本质是双向链表,包含两个重要的成员变量:header 和 size。

1)header是双向链表节点类Entry的实例,LinkedList中只需要存放表头节点即可,表头header不包含数据,只存放前驱节点和后继节点的引用,其中:表头的前驱节点就是双向链表的最后一个元素节点,表头的后继节点就是双向链表的第一个元素节点。

Entry节点类中包含三个重要的成员变量: previous, next, element。previous是该节点的上一个节点,next是该节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值