Java常用类:LinkedList类详解

LinkedList与ArrayList的区别 LinkedList与ArrayList的区别 前言: 本篇为大家带来面试必会的,超高几率问到的题目,几乎百分之八十-----LinkedList与ArrayList,会穿插一些源码来进行解读,也建议大家一定要学会读源码,至少要了解个大概,不要因为一两句看不懂就轻言放弃,这对程序员的提升是非常迅速的,基本上深入研究一遍就会很难忘掉,现在带着大家我们一起来lou一眼. 如果只是想直接知道有什么区别请... 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

LinkedList

LinkedList也是有序集合之一,这里的有序是指放入集合的顺序,不是指按照元素大小排序的。与同样是有序集合ArrayList相比,两者有什么相同点和区别呢?

ArrayListLinkedList
底层是数组结构底层是链表结构
适合多查询,少插入删除元素适合多插入,删除元素,少查询操作
有序有序

成员变量

	transient int size = 0;
	//为了方便取出LinkedList的第一个元素
    transient Node<E> first;
    //为了方便取出LinkedList的最后一个元素
    transient Node<E> last;
	private static class Node<E> {
		//元素的值
        E item;
        //指向后一个元素
        Node<E> next;
        //指向前一个元素
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

从以上源码可以看出,LinkedList底层是链表结构,每个元素都是一个Node,里面包括本身元素的值和指向前后元素的指针,示意图如下:
在这里插入图片描述

常用方法

方法名作用
getFirst()获取第一个元素
peek()获取第一个元素
getLast()获取最后一个元素
removeFirst()移除第一个元素
poll()移除第一个元素
removeLast()移除最后一个元素
addFirst(E e)在集合的头部插入元素
push(E e)在集合的头部插入元素
addLast(E e)在集合的尾部添加元素

看一下添加元素的源码

	//在集合最后添加元素
 	public boolean add(E e) {
        linkLast(e);
        return true;
    }
        void linkLast(E e) {
        //获取目前集合的最后一个元素
        final Node<E> l = last;
        //创建新添加的元素
        final Node<E> newNode = new Node<>(l, e, null);
        //将新添加的元素设为last
        last = newNode;
        if (l == null)
            first = newNode;
        else
        	//将集合之前的最后一个元素的next指针指向新添加的元素
            l.next = newNode;
        size++;
        modCount++;
    }

	//在指定位置插入元素
	public void add(int index, E element) {
        checkPositionIndex(index);

        if (index == size)
            linkLast(element);
        else
            linkBefore(element, node(index));
    }
	void linkBefore(E e, Node<E> succ) {
        // assert succ != null;
        final Node<E> pred = succ.prev;
        final Node<E> newNode = new Node<>(pred, e, succ);
        succ.prev = newNode;
        if (pred == null)
            first = newNode;
        else
            pred.next = newNode;
        size++;
        modCount++;
    }

从源码可以看出,linkedlist没有扩容机制,因为底层是链表,插入元素时,就是改变prev和next指针,如下图需要在集合元素aa和bb之间插入11,其实就是断开之前aa和bb之间连接,然后使得aa的next指针指向11,11的next指向bb,bb的prev指向11。
在这里插入图片描述

JAVA中有序集合ArrayList/LinkedList/Vector 详解 JAVA中有序集合ArrayList/LinkedList/Vector/Stack 详解ArrayListVector和ArrayList差异LinkedList和ArrayList差异 ArrayList 构造方法 new ArrayList(); new ArrayList(int 大小);//制定底层数组的大小 new ArrayList(另外一个集合)//使用另外一个集合创建一个新集... 阅读详情

相关推荐

Java中LinkedList类的特性与用法详解

在Java中,数据结构是非常重要的一部分。其中LinkedList类是一种常用的数据结构,用于存储和操作一系列的元素。该类实现了List接口,能够在列表中插入和删除元素,以及对元素进行访问和搜索。本文将介绍Java中LinkedList类的具体实现和应用场景。首先,我们将探讨LinkedList类的基本概念和构造函数,然后介绍其源代码解析、应用场景案例以及优缺点分析。之后,我们将详细介绍LinkedList类的每个方法及其实现原理,并给出相应的测试用例。最后,我们将对本文的主要内容进行一个全文小结和总结。

喵手的博客 1298

java集合详解之LinkedList

1 特点 有序的,可以存储重复值和null值。 底层是双向链表实现的,线程不安全,在进行任何位置的增删操作花费的时间都一样,不需要搬运数据,效率高,但是在查询的时候要移动指针,查询慢,不适合查询。链表不会涉及到扩容问题。 ArrayList 对空间的消耗是要低于LinkedList,因为LinkedList要维护前后指针,还要对数据进行封装 2 源码分析 2.1 接口的定义和属性 /** *双向链表List,实现了 List 和 Deque接口,实现了list 接口的所有操作,并且允许所有

最初的模样 2793

单目视觉定位:深入解析PNP算法在机器人导航中的实战应用

本文深入解析了PNP算法在机器人单目视觉定位中的核心原理与实战应用。通过拆解坐标变换四步,详细阐述了如何从二维图像点反求相机三维位姿。文章结合OpenCV的solvePnP函数,提供了算法选择、参数调优及结果后处理的实用指南,并针对机器人导航中的特征匹配、尺度不确定性等挑战,给出了鲁棒性优化与实时性平衡的解决方案。

weixin_29083649的博客 419

ArrayList和LinkedList的区别

从实现看: LinkedList底层实现是双链表 ArrayList底层实现是动态数组 从扩容机制看: LinkedList不存在扩容 的说法,因为是链表结构。 ArrayList底层是动态数组存在扩容说法,默认的数组大小是10,在检测是否需要扩容后,如果扩容,会扩容为原来的1.5倍大小。原理就是把老数组的元素存储到新数组里面 从优点看: ArrayList的查找性能好,因为底层是数组,适用于查找元素。 LinkedList底层是双链表,对于插入或者删除元素来说,操作方便,性能高。 从缺点看:

编程进化论 978

COMSOL仿真避坑指南:列管反应器模拟中多孔介质与化学反应设置的5个常见错误

本文详细解析了COMSOL仿真中列管反应器模拟的5个常见错误,包括多孔介质模型选择、化学反应接口配置、对流扩散方程处理、薄层热阻设置及网格独立性验证。特别针对多孔介质与化学反应设置的误区,提供了实用的判断标准和修正方法,帮助工程师避免计算偏差,提升仿真精度。

weixin_29597551的博客 321

MS1030超声波流量计电路实战:如何用15ps精度优化水表设计(附配置代码)

本文深入探讨了如何利用MS1030超声波流量计芯片实现15ps高精度测量,以优化水表设计。文章从系统误差分配出发,详细解析了硬件电路设计要点、SPI通信配置及核心优化技巧,如利用可编程偏置电压和8回波累加功能来提升抗干扰能力与测量稳定性,并附有实用的配置代码示例。

svm4gardener的博客 330

链表(LinkedList)

链表是有序的列表,但是其在内存的存储不一定连续。

weixin_51971817的博客 2488

从零构建生产级K8s-v1.35.0集群:基于Containerd与Cilium的kubeadm实战指南

本文详细介绍了从零构建生产级K8s-v1.35.0集群的全过程,涵盖环境准备、Containerd配置、Kubernetes组件安装、集群初始化及Cilium网络部署等关键步骤。通过实战经验分享系统调优技巧和常见问题解决方案,帮助读者快速搭建稳定高效的Kubernetes集群。

weixin_28725553的博客 218

java学习04(常用类、集合)

java学习

weixin_73416102的博客 947

Claude Code Router 401错误修复

claude code router配置相关环境变量问题

如沐春风 6357

2026年软件测试职业院校技能大赛—ERP管理平台-采购入库模块Bug定位与查找

竞赛对接软件测试相关标准,以“ERP管理平台” 为被测系统,围绕软件测试领域的主流技术及工具,考查选手面 对实际问题的综合分析能力,对测试文档、测试用例的设计能力, 对单元测试、自动化测试、性能测试、接口测试等测试工具及方 法的掌握程度,检验选手团队协作能力、组织规划能力、方法运用能力等。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 194

java常用类介绍及源码阅读(LinkedList)

java.util 类 LinkedList<E> java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.AbstractSequentialList<E> java...

少说,多做。 5271

华为OD机试新系统真题【仓库盘点】

华为OD机试真题 新系统【仓库盘点】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【仓库盘点】

qq_45776114的博客 566

Java LinkedList类详解

LinkList的底层是双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将结点连接起来了,因此在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。在集合框架中,LinkedList也实现了List接口。说明:1.LinkedList实现了List接口2.LinkedList的底层实现了双向链表3.LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问。

asdssadddd的博客 641

构建基于知识图谱的金融监管合规系统

金融行业是一个高度监管的领域,金融机构需要遵守众多复杂的法规和政策。传统的金融监管合规方式往往依赖于人工审查和简单的规则引擎,效率低下且容易出错。构建基于知识图谱的金融监管合规系统的目的在于利用知识图谱强大的知识表示和推理能力,实现对金融业务数据的自动化分析和合规检查,提高监管合规的效率和准确性。本系统的范围涵盖了金融机构的各类业务,如银行业务、证券业务、保险业务等。

AI天才研究院 1165

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【Java】ArrayList与LinkedList详解!!!

在集合框架中,List就是一个接口继承于Collection接口。在数据结构的角度,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删查改以及变量等操作。什么是线性表?线性表是由n个具有相同类型元素组成的有限序列。线性表是一种常见的数据结构。在逻辑上,线性表是一种线性结构,就是连续的一条直线,在物理结构上,不一定是连续的,在物理存储是,通常是以数组和链式的结构形式存储。常见的线性比表有顺序表、链表、栈、队列.......ArrayList是一个普通的类,是顺序表的一种,

2301_80543957的博客 5622

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java类LinkedList常用API详解

LinkedList - 测试类 package LinkedList_UtilityClass; import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; import java.util.ListIterator; /** * LinkedList测试类 */ public class LinkedListTest { public static void main(String[]

WanAkiko. 3280

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java基础--LinkedList类实现链表

Java基础,链表基础,LinkedList类实现链表。

weixin_67679565的博客 1175

Java LinkedList 详解

Java LinkedList 详解

T_Y_F_的博客 1412

LinkedList类详解和刷题中LinkedList的使用

做多了一些leetcode发现在java中LinkedList适用于很多题,因为其类中提供的很多方法让其既可以作为一个栈又可以作为一个(双端)队列,在解决一些关于队列与栈的问题的时候比较全能,所以这篇详细讲解一下LinkedList,让在做算法题的时候知道这个类有这些方法可以用!!!LinkedList中有很多方法的作用重复了,所以找到合适自己(容易记)的方法去做题会更好,不用全记住这些方法。构造一个空列表。构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。

m0_74373359的博客 1194

java的链表(LinkedList类)

文章目录java的链表(LinkedList)LinkedList类的增删改查LinkList类的增加(add、addFirst、addLast)LinkedList类的删除(removeFirst、removeLast)ArrayList类的查找(getFirst、getLast、迭代查询)LinkedList的常用方法对ArrayList和LinkedList的选择 java的链表(LinkedList) Java的LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。 与 A

越努力越幸运的博客 6820

Java基础知识点(常用类、集合)

Java基础知识点一、常用类1.比较器2.内部类3.包装类4.String常用方法:5.正则6.StringBuffer和StringBuild7.Math和Random8.日期类9.数字类二、集合框架1.容器:2.认识集合框架的继承结构:3.ArrayList4.LinkedList5.两个List集合的对比6.Set集合7.Map集合总结 一、常用类 1.比较器 Comparator 和Comparable 比较: 1.Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该

StruggleBamboo的博客 358

Java中LinkedList类的常用方法

 LinkedList类有很多方法,可以模拟栈,队列,链表功能。 一、队列  1.入队 add(E e );将e插入队列末尾。  2.出队删除队首 poll() ; 取出队首元素,并且在队列中删除队首。队首为空返回null。  3.出队删除队首 remove(); 取出队首元素,并且在队列中删除队首。队首为空报错。  4.出队不删除队首 peek(); 只返回队首元素,不删除。为空则返回null。  5.出队不删除队首 element(); 只返回队首元素,不删除。为空则报错。 二、栈  1.入栈 push

tanxinji的博客 8172

解析Java中1000个常用类:LinkedList类,你学会了吗?

LinkedList类位于java.util包中,是List接口的一个实现类,同时实现了Deque接口,这意味着它既可以用作列表,也可以用作双端队列。// 构造方法和主要方法省略。

良月柒 500

Java集合:LinkedList详解

概述本文就LinkedList的几个主要方法展开介绍,并结合几个图片来介绍几个重要操作。基础属性transient int size = 0; // 节点数量 /** * Pointer to first node. * Invariant: (first == null &amp;&amp; last == null) || * (first.prev == nul...

程序员囧辉 5308
上一篇: Java常用类:ArrayList类详解
下一篇: Java常用类:HashMap类详解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值