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
相关推荐
chushiyunen2 分钟前
dom操作笔记、xml和document等
xml·java·笔记
whisperrr.2 分钟前
【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean
xml·java·spring
chushiyunen4 分钟前
tomcat使用笔记、启动失败但是未打印日志
java·笔记·tomcat
天上掉下来个程小白11 分钟前
HttpClient-03.入门案例-发送POST方式请求
java·spring·httpclient·苍穹外卖
H13469489015 分钟前
华为服务器系统备份,想要备份华为服务器系统可以怎么操作?
运维·服务器·负载均衡
ModestCoder_20 分钟前
将一个新的机器人模型导入最新版isaacLab进行训练(以unitree H1_2为例)
android·java·机器人
热爱编程的小曾25 分钟前
sqli-labs靶场 less 8
前端·数据库·less
wangjun515927 分钟前
linux,物理机、虚拟机,同时内外网实现方案;物理机与虚拟机互通网络;
linux·服务器·网络
杰克崔31 分钟前
分析sys高问题的方法总结
linux·运维·服务器
gongzemin37 分钟前
React 和 Vue3 在事件传递的区别
前端·vue.js·react.js