【Java笔记】LinkedList 底层结构

一、LinkedList 的全面说明

  1. LinkedList底层实现了双向链表和双端队列特点
  2. 可以添加任意元素(元素可以重复),包括null
  3. 线程不安全,没有实现同步

二、LinkedList 的底层操作机制

三、LinkedList的增删改查案例

public class LinkedListCRUD {

public static void main(String\[\] args) {

LinkedList linkedList = new LinkedList();

linkedList.add(1);

linkedList.add(2);

linkedList.add(3);

System.out.println("linkedList=" + linkedList);

//演示一个删除结点的

linkedList.remove(); // 这里默认删除的是第一个结点

//linkedList.remove(2);

System.out.println("linkedList=" + linkedList);

//修改某个结点对象

linkedList.set(1, 999);

System.out.println("linkedList=" + linkedList);

//得到某个结点对象

//get(1) 是得到双向链表的第二个对象韩顺平循序渐进学 Java 零基础

第 636页

Object o = linkedList.get(1);

System.out.println(o);//999

//因为 LinkedList 是 实现了 List 接口, 遍历方式

System.out.println("=LinkeList 遍历迭代器==");

Iterator iterator = linkedList.iterator();

while (iterator.hasNext()) {

Object next = iterator.next();

System.out.println("next=" + next);

}

System.out.println("=LinkeList 遍历增强 for==");

for (Object o1 : linkedList) {

System.out.println("o1=" + o1);

}

System.out.println("=LinkeList 遍历普通 for==");

for (int i = 0; i < linkedList.size(); i++) {

System.out.println(linkedList.get(i));

}

//老韩源码阅读. /* 1. LinkedList linkedList = new LinkedList();

public LinkedList() {}

  1. 这时 linkeList 的属性 first = null last = null韩顺平循序渐进学 Java 零基础

  2. 执行 添加

public boolean add(E e) {

linkLast(e);

return true;

}

4.将新的结点,加入到双向链表的最后

void linkLast(E e) {

final Node l = last;

final Node newNode = new Node<>(l, e, null);

last = newNode;

if (l == null)

first = newNode;

else

l.next = newNode;

size++;

modCount++;

}
/
/

老韩读源码 linkedList.remove(); // 这里默认删除的是第一个结点

  1. 执行 removeFirst
    public E remove() {
    return removeFirst();
    }韩顺平循序渐进学 Java 零基础
    第 638页
  2. 执行
    public E removeFirst() {
    final Node f = first;
    if (f == null)
    throw new NoSuchElementException();
    return unlinkFirst(f);
    }
  3. 执行 unlinkFirst, 将 f 指向的双向链表的第一个结点拿掉
    private E unlinkFirst(Node f) {
    // assert f == first && f != null;
    final E element = f.item;
    final Node 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;
    }
    */
    }
    }
相关推荐
北冥you鱼1 天前
深入解析 Go 中 sync.YAML.Unmarshal:如何将 YAML 数据填充到 Config 结构体
开发语言·算法·golang
wwwzhouzy1 天前
SpringBoot 响应式编程
java·spring boot·后端·响应式编程
goldbin_zhang_xu1 天前
我用 Go 重写了一个 OpenClaw 框架:这就是 GoClaw
开发语言·后端·golang·agent框架·goclaw·双循环机制
lingran__1 天前
C++ STL map 与 set 底层剖析与模拟实现万字详解|基于红黑树,复刻 SGI-STL 泛型复用架构
开发语言·c++·stl·set·map·泛型编程·sgi-stl
野生技术架构师1 天前
Multi-agent的新趋势,从Agent Team到Agent Swarm
开发语言·人工智能
Bonnie_12151 天前
10-深入理解ConcurrentHashMap(JDK1.8)
java·开发语言
莫得感情 o1 天前
设计模式 22 · 三个冷门模式:中介者、访问者、解释器
java·设计模式
evans在进步1 天前
LeetCode 74:搜索二维矩阵——Java 虚拟一维数组与二分查找详解
java·leetcode·矩阵
andongni2031 天前
Spring Boot基础应用开发与部署
java·spring boot·后端
lupai1 天前
增值税发票 OCR 识别 API 新手接入指南
java·前端·ocr