【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;
    }
    */
    }
    }
相关推荐
float_六七2 小时前
IntelliJ IDEA双击Ctrl的妙用
java·ide·intellij-idea
能摆一天是一天3 小时前
JAVA stream().flatMap()
java·windows
CodeCraft Studio4 小时前
PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
开发语言·python·pdf·base64·aspose·aspose.pdf
零点零一4 小时前
VS+QT的编程开发工作:关于QT VS tools的使用 qt的官方帮助
开发语言·qt
wan5555cn4 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
颜如玉4 小时前
🤲🏻🤲🏻🤲🏻临时重定向一定要能重定向🤲🏻🤲🏻🤲🏻
java·http·源码
雁于飞5 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
程序员的世界你不懂5 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
星空寻流年5 小时前
设计模式第一章(建造者模式)
java·设计模式·建造者模式
rannn_1116 小时前
【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)
css·笔记·学习·html