Java深入源码之LinkedList

本文详细解析了LinkedList的数据结构特点,包括其整体架构、构造函数、查找与删除机制及所谓的“扩容”问题。介绍了LinkedList作为环形双向循环链表的工作原理,并探讨了如何通过优化遍历来提高查找效率。
摘要由CSDN通过智能技术生成

  一.LinkedList的整体架构:

      1.LinkedList是一个环形的双向循环链表,一个节点有向前与向后的指针且head节点不包含任何的数据。

  .LinkedList的构造函数有两种:

      1.无参的构造函数:直接建立一个知识包含head头结点的空链表

      2.带有Collection[]参数的链表:先调用无参的构造函数去创建链表,然后将数组中的数据添加到链表中

  .LinkedList的查找和删除:

      1、在查找和删除某元素时,源码中都划分为该元素为null和不为null两种情况来处理,LinkedList中允许元素为null。

      2、注意源码中的Entry<E> entry(int index)方法。该方法返回双向链表中指定位置处的节点,而链表中是没有下标索引的,要指定位置出的元素,就要遍历该链表,从源码的实现中,我们看到这里有一个加速动作源码中先将index与长度size的一半比较,如果index<size/2,就只从位置0往后遍历到位置index处,而如果index>size/2,就只从位置size往前遍历到位置index处。这样可以减少一部分不必要的遍历,从而提高一定的效率(实际上效率还是很低)

  .LinkedList的扩容:

      1.因为LinkedList是基于链表而不是数组实现,有新加入的节点就新new出来一块内存,原理上不存在内存不足的情况

所以没有扩容的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值