博客
关于我
LinkedList工作原理
阅读量:790 次
发布时间:2023-01-31

本文共 1635 字,大约阅读时间需要 5 分钟。

LinkedList讲解与源码分析

1.学习LinkedList的必要性

Arraylist和LinkedList都是Java中List接口的实现,而ArrayList作为动态数组的实现,在插入和删除操作上存在性能短板。为了更高效地实现队列操作,我们来深入研究LinkedList。

2.LinkedList简介

2.1 LinkedList定义

LinkedList是List接口的链表实现,是一个双向链表,继承于AbstractSequentialList类。同时,它还实现了Deque接口,提供先进先出的队列操作。LinkedList和ArrayList一样,不是线程安全的。

2.2 LinkedList的数据结构

java.lang.Object    ↳ java.util.AbstractCollection        ↳ java.util.AbstractList            ↳ java.util.AbstractSequentialList                ↳ java.util.LinkedList

LinkedList的核心成员包括:

  • header:表示链表的表头,包含两个指针:previousnext,分别指向上一个节点和下一个节点。
  • size:表示链表中节点的总数。

3.AbstractSequentialList介绍

AbstractSequentialList是一个抽象类,用于提供List接口的基本实现,主要支持随机访问操作。LinkedList作为其子类,继承了这些接口,如get(int index)、set(int index,E element)、add(int index,E element)和remove(int index)等。

4.LinkedList源码解析

4.1 LinkedList的实现原理

  • LinkedList采用双向链表结构,实现了一系列插入、删除、 random-access等操作。
  • 其内部使用一个特殊的内部类Entry存储节点信息,通过头尾指针实现快速的插入和删除。

4.2 内部类Entry

private static class Entry {    E element;    Entry next;    Entry previous;}Entry类中的三个成员:- element:当前节点存储的值。- next、previous:分别指向下一个和上一个节点。

4.3源码关键部分

  • 构造函数

    • 默认构造:初始化一个空链表。
    • 构造函数:初始化链表的表头节点,并设置其next和previous指针。
  • 元素操作

    • add(E e):默认插入节点到链表的指定位置。
    • remove(Object o):从链表中删除指定的节点或元素。
    • get(int index):随机访问链表中的指定位置节点。
    • set(int index, E element):修改链表中指定位置的节点值。
  • 高级操作

    • addFirst、addLast:将元素添加到链表开头或结尾。
    • removeFirst、removeLast:从链表头或尾部删除元素。
    • poll:执行fail-fast机制,确保多线程环境下操作的 thread-safety。

5.Important Methods(重要方法)

  • addFirst和addLast:向链表头或尾部添加节点,提供类似栈和队列的操作。
  • removeFirst和removeLast:从链表头或尾部删除节点,支持队列操作。
  • peek和poll:实现类似集合的查看操作。
  • toContain:判断链表中是否包含指定元素。

6.总结

  • 优点
    • LinkedList的随机访问效率较低,但插入和删除操作效率很高。
    • 可以灵活使用作为栈、队列或双端队列。
  • 应用场景
    • 需要频繁插入和删除元素,但不需要随机访问。
    • 如IDEA的任务栏、聊天记录等场景。

转载地址:http://ukwfk.baihongyu.com/

你可能感兴趣的文章
LeNet介绍-ChatGPT4o作答
查看>>
LeNet剪枝
查看>>
Length of Last Word
查看>>
Lenovo E47A Ubuntu闪屏解决办法
查看>>
Leopard系统装好后不能从硬盘引导的朋友看过来
查看>>
Lepus搭建企业级数据库全方位监控系统
查看>>
LESS 中的变量有什么作用?如何声明和使用变量?
查看>>
Less 日常用法
查看>>
Lettuce 移动框架 for Romantic
查看>>
let、const、var的四点区别( 代码示例 )
查看>>
LexPredict法律词典项目教程
查看>>
LF.73.Combinations Of Coins
查看>>
LFS最终幻想
查看>>
lftp命令详解
查看>>
lib/libstdc++.so.6: version `GLIBCXX_3.4.30‘ not found (required by /lib/x86_64-linux-gnu/libLLVM-15
查看>>
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
查看>>
Libevent 事件管理和添加事件
查看>>
libevent-简单的定时器
查看>>
libevent在windows下使用步骤详解
查看>>
libgdx的菜单配置,以及json文件的结构
查看>>