LinkedList

底层操作机制        

源码图解0515

  1. 底层维护了一个双向链表,实现了双端队列特点
  2. 维护了两个属性,first,last   分别指向 首节点和尾节点
  3. 每个节点 (Node对象),又维护了prev,next,item
  4. LinkedList元素的添加和删除,不是通过数组完成的,效率相对较高
  5. 线程不安全,没有实现同步
  6. 模拟LinkedList
    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

相关推荐

  1. LinkedList

    2024-07-17 16:16:04       22 阅读
  2. ArrayList和LinkedList

    2024-07-17 16:16:04       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 16:16:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 16:16:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 16:16:04       58 阅读
  4. Python语言-面向对象

    2024-07-17 16:16:04       69 阅读

热门阅读

  1. AcWing 668. 游戏时间2

    2024-07-17 16:16:04       22 阅读
  2. [C/C++入门][ifelse]20、闰年判断

    2024-07-17 16:16:04       22 阅读
  3. Pycharm远程配置及Linux&Windows虚拟环境安装记录

    2024-07-17 16:16:04       23 阅读
  4. ES6基本语法(四)——对象和类

    2024-07-17 16:16:04       20 阅读
  5. TG群导航机器人:深度检索技术的创新应用

    2024-07-17 16:16:04       24 阅读
  6. 请求与响应的方式

    2024-07-17 16:16:04       22 阅读
  7. openfeign的概念作用和使用流程

    2024-07-17 16:16:04       22 阅读
  8. Blob数据格式怎么转换成ArrayBuffer

    2024-07-17 16:16:04       21 阅读
  9. Qt篇——在线程中更新ui控件

    2024-07-17 16:16:04       21 阅读