当前位置: 首页 > news >正文

Java(LinkedList和ArrayList底层分析)

LinkedList全面说明:

LinkedList底层操作机制:

LinkedList的方法:

add():增加节点对象

remove():删除一个节点对象(默认删除第一个节点对象)

set():修改一个节点对象

get():得到一个节点对象

LinkedList的遍历:

增强for循环

迭代器

普通for循化

LinkedList的源码解读:

增加源码:

1. LinkedList linkedList = new LinkedList();
public LinkedList() {}
2. 这时 linkeList 的属性 first = null last = null

3. 执行 添加
public boolean add(E e) {
linkLast(e);
return true;
}
4.将新的结点,加入到双向链表的最后
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}

删除源码:

1. 执行 removeFirst
public E remove() {
return removeFirst();
}

2. 执行
public E removeFirst() {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return unlinkFirst(f);
}

3. 执行 unlinkFirst, 将 f 指向的双向链表的第一个结点拿掉
private E unlinkFirst(Node<E> f) {
final E element = f.item;
final Node<E> next = f.next;
f.item = null;
f.next = null; // help GC
first = next;
if (next == null)
last = null;
else
next.prev = null;
size--;
modCount++;
return element;
}

ArrayList 和 LinkedList 比较:



http://www.lryc.cn/news/596640.html

相关文章:

  • Docker Compose UI远程访问教程:结合贝锐花生壳实现内网穿透
  • 应用层攻防启示录:HTTP/HTTPS攻击的精准拦截之道
  • 渗透部分总结
  • 大模型——Data Agent:超越 BI 与 AI 的边界
  • L0 范数、L1 范数和 L2 范数详解(归一化+正则化)
  • 【CAN】2.帧格式
  • 【数据结构初阶】--栈和队列(一)
  • 洛谷 B3939:[GESP样题 四级] 绝对素数 ← 素数判定+逆序整数
  • 二、PV输入升压电路
  • opencv-图像处理
  • Typecho三种版权保护方法对比与实战指南
  • ArKTS: DAL,Model,BLL,Interface,Factory using SQLite
  • 欧式装修颜色要怎么搭配?
  • 前端学习日记(十)
  • 【专题十三】队列 +宽搜
  • 3.5 模块化编程实践
  • 秋招Day17 - Spring - 事务
  • 使用 Ansys Fluent 软件参数化工作流程对搅拌罐中的稳态涡流进行仿真
  • 力扣 78.子集
  • ros0基础-day17
  • 电商项目_秒杀_架构及核心
  • Linux文件系统深入理解
  • 交叉编译opencv(Cpp)于arm64架构开发板上
  • 决策规划内容整理
  • 三轴云台之图像处理算法篇
  • 跨越语言壁垒!ZKmall开源商城多语言架构如何支撑电商全球化布局
  • Ext4文件系统全景解析
  • C++基础学习——文件操作详解
  • wangEditor5添加键盘事件/实现定时保存功能
  • 单张显卡运行多个vllm模型