Java(LinkedList和ArrayList底层分析)

LinkedList全面说明:
LinkedList底层操作机制:
LinkedList的方法:

add():增加节点对象

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

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

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

LinkedList的遍历:

增强for循环

迭代器

普通for循化

LinkedList的源码解读:

增加源码:

  1. LinkedList linkedList = new LinkedList();

public LinkedList() {}

  1. 这时 linkeList 的属性 first = null last = null

  2. 执行 添加

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();

}

  1. 执行

public E removeFirst() {

final Node<E> f = first;

if (f == null)

throw new NoSuchElementException();

return unlinkFirst(f);

}

  1. 执行 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 比较:
相关推荐
2zcode10 分钟前
基于Matlab传统图像处理技术的车辆车型识别与分类方法研究
开发语言·图像处理·matlab
海哥编程25 分钟前
Python 爬虫(一):爬虫伪装
开发语言·爬虫·python
KhalilRuan1 小时前
浅谈——C++和C#差异
开发语言·c++·c#
Reggie_L2 小时前
spring-cloud概述
java
遗憾随她而去.2 小时前
js面试题 高频(1-11题)
开发语言·前端·javascript
贾修行2 小时前
深入浅出理解 Reactor:响应式编程的利器
java·reactor
Dxy12393102165 小时前
Python观察者模式详解:从理论到实战
开发语言·python·观察者模式
hqxstudying5 小时前
J2EE模式---前端控制器模式
java·前端·设计模式·java-ee·状态模式·代码规范·前端控制器模式
不写八个8 小时前
GoLang教程005:switch分支
开发语言·后端·golang