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
相关推荐
Kaede64 分钟前
如何应对Linux云服务器磁盘空间不足的情况
linux·运维·服务器
优秀的颜4 分钟前
计算机基础知识(第五篇)
java·开发语言·分布式
BillKu5 分钟前
Java严格模式withResolverStyle解析日期错误及解决方案
java
网安INF10 分钟前
ElGamal加密算法:离散对数难题的安全基石
java·网络安全·密码学
AWS官方合作商1 小时前
在CSDN发布AWS Proton解决方案:实现云原生应用的标准化部署
java·云原生·aws
gadiaola2 小时前
【JVM】Java虚拟机(二)——垃圾回收
java·jvm
Zfox_2 小时前
Redis:Hash数据类型
服务器·数据库·redis·缓存·微服务·哈希算法
coderSong25685 小时前
Java高级 |【实验八】springboot 使用Websocket
java·spring boot·后端·websocket
Mr_Air_Boy6 小时前
SpringBoot使用dynamic配置多数据源时使用@Transactional事务在非primary的数据源上遇到的问题
java·spring boot·后端
豆沙沙包?6 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏