• LinkedList源码分析笔记(jdk1.8)


    1.特点

      LinkedList的底层实现是由一个双向链表实现的,可以从两端作为头节点遍历链表。

      允许元素为null

      线程不安全

      增删相对ArrayList快,改查相对ArrayList慢(curd都会根据index找到Node,折半查找来提高效率)

      底层链表实现,没有扩容一说

    2.链表节点

      静态内部类

        private static class Node<E> {
            E item;//元素值
            Node<E> next;//后置节点
            Node<E> prev;//前置节点
    
            Node(Node<E> prev, E element, Node<E> next) {
                this.item = element;
                this.next = next;
                this.prev = prev;
            }
        }

    3.方法

      add和remove系列的方法,涉及到节点指向的问题,因为是双向链表,所以除了确定元素之外,还需要重置前置节点和后置节点

        1.前置节点和后置节点为null是分别判断

        2.remove,元素的前置节点的next指向当前元素的next;当前元素的后置节点的prev指向当前元素的的prev;置空当前元素一节当前元素的节点指向,等待gc

        3.add默认尾部追加

        4.addAll中定义的中间节点变量,和插入位置的后一个节点 Node<E> pred, succ; ,在for循环中使用 pred = newNode; 步进指向插入的最后一个元素,modCount++;

      get和set方法,都要先获取节点(通过位移运算折半查找,提升查询效率)

         Node<E> node(int index) 

      ArrayList和LinkedList都有一个内部类ListItr,实现了ListIterator接口

        可以使用listIterator进行迭代循环

      LinkedList比较简单主要是数据结构双向列表的指向问题,画图很好理解

  • 相关阅读:
    缓存在高并发场景下的常见问题
    如何提高缓存命中率
    修改或隐藏nginx的版本号
    centos7使用docker安装zabbix
    Handsontable 新增一行 默认值
    java保留有效数字
    Handsontable通用方法
    handsontable插件事件
    handsontable常规配置的中文API
    handsontable的核心方法
  • 原文地址:https://www.cnblogs.com/soul-wonder/p/10021926.html
Copyright © 2020-2023  润新知