LinkedList实现原理(面试必背)

LinkedList

LinkedList 是一种基于链表实现的集合,相比于 ArrayList,它在插入和删除元素时更快,但在读取元素时稍慢

实现原理:

LinkedList的底层是一个双向链表。链表结点由前一个地址值,当前元素,下一个地址值三部分组成,还存储了链表中的第一个和最后一个结点地址。其双向链表的特性,可以用来实现队列。当添加元素时,LinkedList 会创建新的节点,并将该节点的指针与相邻节点的指针连接起来,形成链表。

当删除元素时,LinkedList 会修改节点的指针,将被删除节点的前一个节点与后一个节点直接连接起
来。
在这里插入图片描述

新增元素时:

头部新增,先获取头部节点元素,判断是否为null,若为null,说明原链表中没有元素,则把 first 和 last 都赋为当前新增节点。 若不为null,说明原链表中有元素,则把first赋为当前新增节点,把原头部节点f的上级节点修改为当前新增节点的下级节点
在这里插入图片描述

尾部新增:处理方式和头部一致
在这里插入图片描述

直接调用add方法时,默认进行尾部新增:
在这里插入图片描述

扩容机制:

由于它的底层实现是链表,所以没有容量大小的定义,只有上个节点,当前节点,下个节点,每个节点都有一个上级节点和一个下级节点。

性能表现:

由于通过双向链表实现,元素本身携带者上一个元素及下一个元素的引用标识,因此在查询时,需要通过地址一个一个寻找过去,比较耗时,而删除与插入就很快了。因为在删除和插入时,只需要改变数据引用的上一个和下一个的标识,LinkedList比ArrayList占用资源更多,因为一个数据还需要保存指向前后数据的引用标识

线程安全问题:

LinkedList不是线程安全的,在多线程环境下使用时,需要进行额外的同步处理。

总结

1.LinkedList是基于双向链表实现,可实现队列
2.查询慢,插入和删除快
3.没有容量概念,集合的容量随着元素的加入自动增加
4.线程不安全


上一篇 >>>>> ArratsList实现原理(面试必背)

That’s it;

往事往事堪堪亦澜澜,前路漫漫亦灿灿。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值