LinkedList

底层操作机制

源码图解0515

  1. 底层维护了一个双向链表,实现了双端队列特点

  2. 维护了两个属性,first,last 分别指向 首节点和尾节点

  3. 每个节点 (Node对象),又维护了prev,next,item

  4. LinkedList元素的添加和删除,不是通过数组完成的,效率相对较高

  5. 线程不安全,没有实现同步

  6. 模拟LinkedList

    java 复制代码
    package chapter;
    
    public class LinkedList {
        public static void main(String[] args) {
            Node a = new Node("jack");
            Node b = new Node("Tom");
            Node c = new Node("Jerry");
            //连接结点
            a.next = b;
            b.next = c;
            c.prev = b;
            b.prev = a;
    
            Node first = a; //双向链表的头结点
            Node last = c; //双向链表的尾结点
    
            //遍历   前到后
            System.out.println("=================================");
            while(true){
                if(first == null){
                    break;
                }
                System.out.println(first);
                first = first.next;
            }
            //遍历   后到前
            System.out.println("=================================");
            while(true){
                if(last == null){
                    break;
                }
                System.out.println(last);
                last = last.prev;
            }
    
            //添加对象
            Node d = new Node("smith");
            d.next =c;
            d.prev = a;
            a.next =d;
            c.prev = d;
    
            //再次遍历
            System.out.println("=================================");
            first = a;
            while(true){
                if(first == null){
                    break;
                }
                System.out.println(first);
                first = first.next;
            }
        }
    }
    
    //定义一个Node类,即定义一个Node节点
    class Node {
        public Object item;   //存放数据的位置
        public Node next;     //后一个结点
        public Node prev;     //上一个结点
    
        public Node(Object item) {
            this.item = item;
        }
    
        @Override
        public String toString() {
            return "Node{" +
                    "item=" + item;
        }
    }

    toString重写next prev 产生问题

方法

add()

remove()

比较

|------------|------|-----------|-------|
| | 底层结构 | 增删的效率 | 改查的效率 |
| ArrayList | 可变数组 | 较低 数组扩容 | 较高 |
| LinkedList | 双向链表 | 较高 通过链表追加 | 较低 |

  1. 改查操作多,ArrayList
  2. 增删操作多,LinkedList
  3. 一般程序中,大多为查询,故采用ArrayList
  4. 也可两个模块分别使用ArrayList LinkedList
相关推荐
JJJennie77713 分钟前
MAI Gateway技术揭秘:大模型网关能做什么?从原理到落地
linux·服务器·网络·ai网关
YangYang9YangYan32 分钟前
2026 校招审计风控岗位 JD 拆解,工具、专业能力与面试考点
java·大数据·人工智能·数据分析
wuminyu6 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
怕浪猫6 小时前
FDE 如何正确解决现场项目工程性的问题
前端·后端·ai编程
西瓜太郎12346 小时前
外层模型卡片与分组详情成功率不一致,应该怎么排查?
前端·typescript·go·软件工程·react
前端世界6 小时前
Linux服务器实战:NTP时间同步、SELinux权限与rsyslog日志管理,一次搞懂三大运维问题
linux·运维·服务器
Android系统攻城狮7 小时前
Linux Gstreamer深度解析之gst_audio_converter_new调用流程与实战(二十)
linux·运维·服务器·gstreamer音视频·音视频进阶
GreenTea7 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
考虑考虑7 小时前
Java实现hmacsha256加密算法
java·后端·java ee
captain3767 小时前
▲网络原理(2)-TCP
java·服务器·网络·tcp/ip·java-ee