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
相关推荐
泡沫·4 分钟前
8.项目实战:Ecshop
服务器
倚栏听风雨14 分钟前
详解 TypeScript 中,async 和 await
前端
雨中飘荡的记忆18 分钟前
深入理解设计模式之单例模式
java·设计模式
小皮虾22 分钟前
告别服务器!小程序纯前端“图片转 PDF”工具,隐私安全又高效
前端·javascript·微信小程序
ohyeah22 分钟前
我的变量去哪了?JS 作用域入门指南
前端·javascript
灼华_25 分钟前
Vue 3 + Vite + Router + Pinia + Element Plus + Monorepo + qiankun 构建企业级中后台前端框架
前端
倚栏听风雨26 分钟前
TypeScript 中,Promise
前端
程序员西西26 分钟前
Spring Boot整合MyBatis调用存储过程?
java·后端
2501_9418798137 分钟前
Python在微服务高并发异步API网关请求处理与智能路由架构中的实践
java·开发语言
AAA简单玩转程序设计39 分钟前
Java进阶小白手册:基础玩法升级,告别青铜套路
java