首页 > 编程语言 >【Java笔记】LinkedList 底层结构

【Java笔记】LinkedList 底层结构

时间:2024-12-15 12:27:59浏览次数:6  
标签:Java LinkedList System 笔记 next println null 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() {}
2. 这时 linkeList 的属性 first = null last = null韩顺平循序渐进学 Java 零基础
3. 执行 添加
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;
    }
    */
    }
    }
    在这里插入图片描述

标签:Java,LinkedList,System,笔记,next,println,null,linkedList
From: https://blog.csdn.net/2401_88623584/article/details/144355204

相关文章

  • 【Java学习笔记】Map 接口实现类-HashMap
    一、HashMap小结二、HashMap底层机制及源码剖析packagecom.hspedu.map_;importjava.util.HashMap;/***@author韩顺平*@version1.0*/@SuppressWarnings({"all"})publicclassHashMapSource1{publicstaticvoidmain(String[]args){HashMapmap......
  • Java NIO 核心知识介绍
    JavaNIO核心知识介绍  概要  在传统的JavaI/O模型(BIO)中,I/O操作是以阻塞的方式进行的。也就是说,当一个线程执行一个I/O操作时,它会被阻塞直到操作完成。这种阻塞模型在处理多个并发连接时可能会导致性能瓶颈,因为需要为每个连接创建一个线程,而线程的创建和切换都是有......
  • 最新毕设-SpringBoot-养老院信息管理系统-17255(免费领项目)可做计算机毕业设计JAVA、PH
    基于SpringBoot的养老院信息管理系统的设计与实现摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管......
  • 并发编程笔记三-ConditionObject源码深度解析
     一.ConditionObject概述        synchronized提供了wait和notify的方法实现线程在持有锁时,可以实现挂起,唤醒的操作。其实ReentrantLock也拥有这个功能,ReentrantLock提供了await和signal方法去实现类似wait和notify的功能。同样的,想执行await或者是signal就必须先持......
  • 汽车XCP标定学习笔记简略版
    1为什么需要标定?同一款车有不同的配置,功能越多价格自然就越高,比如客户可以选择是否购买智能辅助驾驶功能服务;汽车通常配置了不同的驾驶模式,比如经济模式,正常模式和运动模式,驾驶员可以根据自己的喜好和路况来选择。以上两个例子都与标定相关,一个通过标定可以实现一个功能的开......
  • 【Java面试】到底什么是堆区和栈区?
    其实,堆区和栈区从本质上讲没有任何区别,因为它们都是内存的一块区域而已。它们的区别在于用法。在我们的代码中,会使用各种各样的变量,而这些变量是会占据内存的,也就涉及到了内存的分配与释放。当变量出现时,就会产生一个问题:这些变量的使用范围(生命周期)是仅仅局限在一个函数内......
  • 【Java面试】深拷贝、浅拷贝和引用拷贝三者的区别
    浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。我想,还有很多人搞不清楚......
  • 学习笔记070——Java中【泛型】和【枚举】
    文章目录1、泛型1.1、为什么要使用泛型?1.2、泛型的应用1.3、泛型通配符1.4、泛型上限和下限1.5、泛型接口2、枚举1、泛型Generics是指在定义类的时候不指定类中某个信息(属性/方法返回值)的具体数据类型,而是用一个标识符来替代,当外部实例化对象的时候再来指定具体的......
  • Java代码执行流程(简易易懂版)上部
    很多同学刚开始学java时看懂了怎么用,却不知道他内存怎么运行的过程,所以会感觉很迷茫,感觉白学了,我也和大家一样,这里我用了三天的时间给大家整理了代码执行时的过程,并且注意的一些事项,如果有不对的地方请大家指出,我在改正我们先定义一个A类在main函数创建A类的对象实例我们来......
  • 【如何获取股票数据02】Python、Java等多种主流语言实例演示获取股票行情api接口之沪
    最近一两年内,股票量化分析逐渐成为热门话题。而从事这一领域工作的第一步,就是获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的主要任务是从这些数据中提炼出有价值的信......