Java系列-LinkedList源码

1.双链表结构

public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable{transient int size = 0;transient Node<E> first;transient Node<E> last;public LinkedList() {}
}

2.add

创建Node

更新last

更新老last的next

public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable{public boolean add(E e) {linkLast(e);return true;}void linkLast(E e) {final Node<E> l = last;//创建Node//prev是last,next是nullfinal Node<E> newNode = new Node<>(l, e, null);last = newNode; //更新lastif (l == null){//如果之前没有元素first = newNode; //头也是新元素} else{l.next = newNode;}size++; //更新个数modCount++;}private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}}
}

3.get

遍历的方式获得元素

public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable{public E get(int index) {checkElementIndex(index); //判断index是否为有效范围内的indexreturn node(index).item;}Node<E> node(int index) {// assert isElementIndex(index);if (index < (size >> 1)) {//如果index小于size的一半,从first开始遍历Node<E> x = first;for (int i = 0; i < index; i++){x = x.next;}return x;} else {Node<E> x = last; //不然从尾开始遍历for (int i = size - 1; i > index; i--){x = x.prev;}return x;}}
}

4.remove index

先通过遍历的方式获得元素

然后将该元素从列表移除

public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable{public E remove(int index) {checkElementIndex(index);//node(index)找到index位置的nodereturn unlink(node(index));}//将找到的node从链表移除E unlink(Node<E> x) {// assert x != null;final E element = x.item;final Node<E> next = x.next;final Node<E> prev = x.prev;if (prev == null) {//表示找到的元素为第一个元素first = next;} else {prev.next = next; //prev node next 移除nodex.prev = null;//把这个元素的prev赋值为null}if (next == null) {//找到的元素为最后一个元素last = prev;} else {next.prev = prev;x.next = null; //把这个元素的next赋值为null}x.item = null; //把这个元素的item赋值为nullsize--;modCount++;return element;}
}

5.remove object移除元素

遍历找到元素后,移动该元素

public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable{public boolean remove(Object o) {if (o == null) {for (Node<E> x = first; x != null; x = x.next) {if (x.item == null) {unlink(x); //移除元素return true;}}} else {for (Node<E> x = first; x != null; x = x.next) {if (o.equals(x.item)) {unlink(x);return true;}}}return false;}
}

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

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

相关文章

python项目源码保护——代码混淆

什么是代码混淆 代码混淆是指将代码进行加密、压缩、乱序等操作&#xff0c;使得代码难以被阅读和理解&#xff0c;从而达到保护代码的目的。代码混淆可以有效地防止代码被反编译和盗用&#xff0c;提高代码的安全性。 pyobfuscate pyobfusate通过多种方式转换源代码。其中一…

Scan Context / Scan Context ++ 论文和源码阅读

Title: Scan Context / Scan Context 论文和源码阅读 文章目录 前言I. Scan Context 的构造A. 论文内容B. 源码内容 2. Ring Key/Retrieval Key 的计算A. Ring KeyB. Retrieval Key 3. KD 树搜索 —— 第一阶段搜索A. KD 树构建B. KD 树搜索 4. Scan Context 距离搜索 —— 第…

基于mps的pytorch 多实例并行推理

背景 大模型训练好后&#xff0c;进行部署时&#xff0c;发现可使用的显卡容量远大于模型占用空间 。是否可以同时加载多个模型实例到显存空间&#xff0c;且能实现多个实例同时并发执行&#xff1f;本次实验测试基于mps的方案&#xff0c;当请求依次过来时&#xff0c;多个相…

一种LED驱动专用控制电路方案

一、基本的概述 TM1651 是一种带键盘扫描接口的LED&#xff08;发光二极管显示器&#xff09;驱动控制专用电路&#xff0c;内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。本产品性能优良&#xff0c;质量可靠。采用SOP16/DIP16的封装形式。 二、特性说…

整体迁移SVN仓库到新的windows服务器

一、背景 公司原有的SVN服务器年代比较久远经常出现重启情况&#xff0c;需要把SVN仓库重新迁移到新的服务器上&#xff0c;在网上也搜到过拷贝Repositories文件直接在新服务器覆盖的迁移方案&#xff0c;但考虑到原有的操作系统和现有的操作系统版本不一致&#xff0c;SVN版本…

获取窗口中文标题栏GetWindowText()

GetWindowText(hwnd, lpString, len)会根据传入的第二个参数lpString 判断是ASCII或者Unicode编码选择调用GetWindowTextA(hwnd, lpString, len)&#xff0c;还是GetWindowTextW(hwnd, lpString, len)&#xff0c;所以想获取中文标题直接调用GetWindowTextW() ASCII GetWindowT…

frp 配置内网访问

frp介绍 frp 是一个开源、简洁易用、高性能的内网穿透软件&#xff0c;支持 tcp, udp, http, https 等协议。frp 项目官网是 https://github.com/fatedier/frp 下载地址&#xff1a; https://github.com/fatedier/frp/releases frp工作原理 服务端运行&#xff0c;监听一个…

分治算法——75. 颜色分类

文章目录 &#x1f33f;0. 分治&#x1f33b;1. 题目&#x1f33c;2. 算法原理&#x1f334;3. 代码实现 &#x1f33f;0. 分治 分治分治&#xff0c;顾名思义分而治之&#xff0c;将一个大问题转换成若干个子问题&#xff0c;再将这些子问题的基础上继续划分成更小的子问题&a…

【新手解答3】深入探索 C 语言:头文件提供必要的接口、源文件保持实现细节的私有性 + 进一步学习的方向 + 如何快速编写程序并最终能制作小游戏

C语言的相关问题解答 写在最前面问题1&#xff1a;头文件提供必要的接口、源文件保持实现细节的私有性封装在头文件中的作用源文件中的“封装”总结 问题2&#xff1a;接下来的学习方向问题3&#xff1a;如何快速编写程序并最终能制作小游戏1. 基本编程概念2. 数组和基本算法3.…

PyQt基础_011_对话框类控件QMessage

基本功能 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class WinForm( QWidget): def __init__(self): super(WinForm,self).__init__() self.setWindowTitle("QMessageBox") self.resize(300, 100) self.myButt…

EG20网口远程下载程序使用案例

EG20网口远程下载程序使用案例 前言&#xff1a;本文档主要说明了使用蓝蜂虚拟网络工具通过EG20网关的网口&#xff08;LAN口&#xff09;远程给PLC下载程序的步骤及其注意事项。使用蓝蜂虚拟网络工具&#xff0c;不仅支持程序的远程下载&#xff0c;同样支持程序的远程上传与…

爬虫源代码

public class Spider implements Runnable {private ArrayList urls; //URL列表private HashMap indexedURLs; //已经检索过的URL列表private int threads ; //初始化线程数 public static void main(String argv[]) throws Exception {if(argv[0] null){System.out.printl…

【SA8295P 源码分析】136 - QNX 如何抓取系统 log 方法 之 网络部分日志抓取方法

【SA8295P 源码分析】136 - QNX 如何抓取系统 log 方法 之 网络部分日志抓取方法 一、slog2info二、获取当前系统网络信息三、tracelogger四、qscan.sh : 用于收集 qnx 文件系统 权限、checksums 等信息系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》 本文链…

【Node.js后端架构:MVC模式】基于expres讲解

Node.js后端架构&#xff1a;MVC模式 什么是MVC MVC (Model-View-Controller) 是一种软件设计模式&#xff0c;用于将应用程序的逻辑分离成三个不同的组件&#xff1a;模型、视图和控制器。 模型&#xff08;Model&#xff09;负责处理应用程序的数据逻辑。它负责从数据库或其…

21、LED点阵屏显示图形动画

c51的sfr、sbit sfr:特殊功能寄存器声明 例如&#xff1a;sfr P00x80 声明P0口寄存器&#xff0c;物理地址为0x80 sbit:特殊位声明 例如&#xff1a;sbit p0_1 0x81; 或 sbit p0_1 p0^1; 声明P0寄存器的第一位 可位寻址、不可位寻址&#xff1a;在单片机系统中&#xff0c;操…

JS事件循环详解

前言 进程 程序运行需要其专属的内存空间&#xff0c;可以把这块内存空间简单理解为进程。 下图每个颜色块都可视为一个应用&#xff0c;每个应用至少应有一个进程&#xff0c;进程之间相互独立&#xff0c;即使想要通信&#xff0c;也需要双方同意。 线程 有了进程后&…

二次元检测设备导轨修复指南

二次元检测设备是一种高精度的测量仪器&#xff0c;用于检测物体表面的形状、尺寸和精度等。直线导轨是二次元检测设备中最重要的组成部分之一&#xff0c;它的精度和稳定性直接影响到设备的测量结果和可靠性&#xff0c;因此&#xff0c;对导轨进行修复和保养是非常重要的。 直…

基于Java SSM移动电源租赁系统

涉及的知识点&#xff1a;Java程序设计基础知识、类的创建、对象的使用、面向对象继承、面向对象多态性、抽象类和接口、集合与泛型、文件与输入输出流操作、异常处理与日志记录、Java GUI 、事件处理、Java数据库编程。 一、实验目的 &#xff08;1&#xff09;掌握Java编程…

Linux删除了大文件为什么磁盘空间没有释放?

某天&#xff0c;收到监控系统的告警信息&#xff0c;说磁盘空间占用过高&#xff0c;登上服务器&#xff0c;使用 df -h 一看&#xff0c;发现磁盘占用率已经 96%了&#xff1a; 通过查看 /usr/local/nginx/conf/vhost/xxx.conf 找到 access_log 和 error_log 的路径&#x…

Android 7.1 点击清空全部按钮清空一切运行进程(包括后台在播音乐)

Android 7.1 点击清空全部按钮清空一切运行进程&#xff08;包括后台在播音乐&#xff09; 近来收到客户反馈说音乐在后台播放时点击“清空全部”按钮后台音乐没有被kill掉&#xff0c;仍在播放&#xff0c;需要在点击“清空全部”后kill掉一切后台运行进程&#xff0c;具体修…