LinkedList的底层实现原理(JDK8)

news2024/9/23 21:25:00

目录

    • 一、知识点回顾
    • 二、LinkedList 的 add() 和 remove() 的实现
      • 2.1 list.add(e) 实现原理
      • 2.2 list.remove(e) 实现原理

一、知识点回顾

双向链表特点:

  • 区间离散,占用内存宽松,空间复杂度小,时间复杂度 O(n)。
  • 优点:插入删除速度快,内存利用率高,没有大小固定,扩展灵活。
  • 缺点:不能随机查找,每次都是从第一个或最后一个开始(查询效率低)。

二、LinkedList 的 add() 和 remove() 的实现

2.1 list.add(e) 实现原理

  • 第 1 步,将元素 e 封装为新的Node{}节点,并且将 last 指针指向的末尾节点作为新节点的 prev,然后将 last 指针指向新节点。
  • 第 2 步,判断原有链表是否为空:
    • 原有链表为空,则调整 first 指针指向新节点;
    • 原有链表不为空,则将末尾节点的 next 指针指向新节点。

在这里插入图片描述

2.2 list.remove(e) 实现原理

  • 第 1 步,判断索引是否有效:
    • 如果索引无效,抛出异常:IndexOutOfBoundsException
  • 第 2 步,根据索引是否位于上半段,找出节点位置:
    • 如果索引位于上半段,则自顶向下遍历;
    • 如果索引位于下半段,则自底向上遍历。
  • 第 3 步,根据待移除节点是否为第一个节点进行调整:
    • 如果待移除节点是第一个节点, 则调整 first 指针;
    • 如果待移除节点不是第一个节点,则断开待移除节点与前节点的链接。
  • 第 4 步,根据待移除节点是否为最后一个节点进行调整:
    • 如果待移除节点是最后一个节点,则调整 last 指针;
    • 如果待移除节点不是最后一个节点,则断开待移除节点与后节点的链接。

(点击图片放大)
在这里插入图片描述

整理完毕,完结撒花~ 🌻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/689762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Jetpack Compose —— FloatingActionButton

FloatingActionButton 通常用于呈现应用程序的主要操作或常用操作,并具有显著的圆形形状和浮动的定位。FloatingActionButton 提供了一种简单而优雅的方式来引导用户进行主要的应用程序交互,例如开始一个新的任务、分享内容、启动一个动作等。它在应用程…

Java——《面试题——Zookeeper篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

FreeRTOS 中断管理之延迟中断处理 -- 二值信号量同步

3.1 概览 3.1.1 事件:嵌入式实时操作系统需要对整个系统环境产生的事件作出反应,例如:按一下按键,灯闪一下 3.1.2 ISR 中断服务函数尽量越短越好,应快速执行完,然后退出中断服务函数 3.1.3 在中断服务函…

Web3在HTML中获取 MetaMask 启用的用户列表

当然 我们还是要先启动ganache环境 然后 通过MetaMask 导入一些用户 然后 我们需要在页面中引入 web3.min.js 如果您还没有这个文件 可以查看我的文章web3.js获取导入 然后我访问官网 https://learnblockchain.cn/docs/web3.js/web3-eth.html#getchainid 打开后 先来到 web3.…

OAuth2.0四种授权模式及实战

OAuth2.0四种授权模式以及Oauth2.0实战 首先我们得了解什么是Oauth2.0,简单来说Oauth2.0它是一个授权协议。我们可能会听说过,使用Oauth2.0来实现单点登录SSO,以及第三方登录。那个什么是授权? 举个通俗易懂的例子,就…

概率论与数理统计教程第六章节笔记

参考书籍:概率论与数理统计教程第三版 茆诗松 程依明 濮晓龙 编著 文章声明:如有错误还望批评指正 文章目录 ξ \xi ξ 6.1点估计的概念与无偏性 ξ 6.2 \xi6.2 ξ6.2矩估计及相和性 ξ 6.3 \xi6.3 ξ6.3最大似然估计与EM算法 ξ 6.6 \xi6.6 ξ6.6区间估…

Pandas 解决保存excel文件发生异常问题

代码: #保存excel my.to_excel(df.xlsx,#设置Excel1的工作表名sheet_name表1) 异常: 原因:没有导入这个库openpyxl 解决: 1) 使用 pip list 查看 2) 如果没有,则安装 pip install openpyxl 3) 再导入 import openpyx…

uniapp中引入uview教程

uview官网,本次教程中用不到,若需要查看官网教程,可点击前往 1、在插件市场中搜索uview,并导入项目,点击前往 2、如果没有安装scss,需要安装scss依赖,如已安装,请跳过 // 安装sass…

【刷题笔记】反转链表——头插法/栈实现

【刷题笔记】反转链表——头插法/栈实现 解法一:头插法 思路及代码: * 1、创建一个newheadnull,即最终反转后的链表的头结点* 2、循环遍历当前的链表的head,创建temp记录当前head的next,然后将head的next指向新的头ne…

Acer宏碁Swift笔记本电脑SF314-54原装Win10系统工厂模式恢复原厂OEM出厂系统镜像

Acer宏基,Acer宏碁Swift笔记本电脑,Swift SF314-54原装Windows10系统工厂模式恢复原厂OEM出厂状态镜像 系统自带所有驱动、Office办公软件、出厂主题壁纸LOGO、 Acer Care Center、Quick Access等预装程序 所需要工具:32G或以上的U盘&#…

springboot+vue高校科研队伍管理系统_2byeq-

1.登录和注册:创建用户密码后用户输入正确用户密码即可登录,超级管理员可查看平台内所有账号信息。 2.个人信息管理:支持修改个人信息以及保存。 3.科研队伍管理:支持创建科研队伍,个人可以创建队伍后自己成为组长&…

uniapp倒计时

uniapp实现根据传递的时间展示倒计时 需求说明:听书倒计时,设置完时间展示倒计时 countDownTime(showTime){ //showTime为传递的时间 默认在转化成分钟var that this;that.times showTime * 60that.timer setInterval(function() {that.times--;if(th…

教程 | Datavines 自定义数据质量检查规则(Metric)

Metric 是 Datavines 中一个核心概念,一个 Metric 表示一个数据质量检查规则,比如空值检查和表行数检查都是一个规则。Metric 采用插件化设计,用户可以根据自己的需求来实现一个 Metric。下面我们来详细讲解一下如何自定义Metric。 第一步 …

WPF 零基础入门笔记(3):数据绑定详解(更新中)

文章目录 文章合集数据绑定数据绑定实战事件通知型数据驱动,双向绑定资源绑定数据源绑定全局数据源后端和前端绑定问题 文章合集 WPF基础知识博客专栏 WPF微软文档 WPF控件文档 B站对应WPF数据绑定视频教程 数据绑定 我们在之前的文章中,详细解释了数…

windows配置jmeter定时任务

场景: 需要让脚本在指定的执行 步骤: 准备jmeter脚本,保证在命令行中可以调用脚本且脚本运行正常:"C:\Apache\jmeter\bin\jmeter.bat" -n -t C:\tests\test_plan.jmx -l C:\tests\results.jtl -t : 指定执行jmeter脚…

chatgpt赋能python:Python计算CCI指标的介绍

Python计算CCI指标的介绍 CCI(Commodity Channel Index)是一种技术指标,是推断价格高低位和趋势变化的一种工具。通过计算股票、期货、外汇和其他市场的典型价格、最高价和最低价以及CCI的值,可以预测未来价格趋势并进行交易。 …

Solidity第二次作业

目录 第一题 第二题 第三题 第四题 第五题 第六题 第一题 // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.6.0; contract math { //1.根据所属类型值域,修改变量numa与numb值 uint8 numa 256; int8 numb 128; int numc 255; fun…

安科瑞无线测温系统在高压开关柜中的应用

摘要:高压开关柜是配电系统中重要的组成部分,其主要作用是控制电荷、分配电能和开断电流等,对维持系统的稳定性有一定的保障作用。将无线测温技术应用于高压开关柜,可以实现对其进行实时的动态监测,有助于相关工作人员…

使用CSS的polygon属性画各个方向的半圆环

CSS的polygon属性 CSS polygon()函数是一个图形函数,用于指定某种基本图形类型。polygon()函数用于定义一个多边形 .container{width: 50px;height: 50px;border: 13px solid #0c73fe;border-radius: 50px;/* 上半圆环 */clip-path: polygon(100% 50%, 0 50%, 0 0, …

Redis cluster集群搭建集群增删集群节点

1.Redis cluster集群架构(本机ip:192.168.2.100) 建立三台linux服务器,分别是192.168.2.61、192.168.2.62、192.168.2.63 1.1.建立192.168.2.61Linux服务器 1.配置Linux服务器 # 在 /etc/sysconfig/network-scripts/ifcfg-eno16777736文件…