• 关于LinkedList for OpenJDK


    概述

         LinkedList采用底层采用双向链表结构,与ArrayList的数组结构不一样。LinkedList因数据结构不一样,不需要申请连续内存,可以利用碎片内存。元素保存数据内容外还需要存储上下游的引用,形成数据链。LinkedList是非线程安全的。
     
    类图
     
    size变量
        与ArrayList的size变量一样,size在此意思元素数量。
     
    first变量
         存储第一个元素引用
     
    last变量
         存储最后一个元素引用
     
    Node节点类
         LinkedList中实现一个内部类Node,实例对象存储在item中并且保存上下游引用。item变量引用被存储元素实例,next变量引用下一个节点,prev引用上一个节点。见下源码:
     
    private修饰说明Node只在LinkedList内部使用
    static修饰,因为要static关键字不知道有什么用。
     
    添加元素
    add函数其实很简单,调用linkLast函数,未异常返回boolean类型true. 
     
    linkLast函数实现新增元素追加到元素链最后,并且建立链路关系。size变量累加。
    第一种场景:e是第一个元素,last变量为null, newNode变量引用赋给first,last变量引用newNode。
    第二种场景:LinkedList的first已存储引用,即e元素非第一个元素。l实例的next变量引用newNode,newNode赋值给last成为最后一个元素。newNode的next变量为null.
     
     
    批量添加元素
    1)checkPositionIndex检查index不能大于size-1
     
    2)传递index变量给node函数获取相应位置的Node实例。见下面源码:
    index<(size>>1)当成if条件,这里使用一次二分查找方式来快速查找Node实现,LinkedList元素链长的时间特别有用。接下来是一个从头开始查找,另一个从尾开始查找。
     
    3)逐个追加元素
     
    4)addAll函数源码
     
     
    指定索引位置代替元素
    使用set函数实现插入元素。使用checkElementIndex检查index,然后使用node函数获取对应index位置Node实例,最后element赋值给item变量。
     
    删除指定索引元素的remove函数
    1)使用checkElementIndex检查index,node函数获取index对应位置的Node实例,
    2)unlink函数删除链路关系。
     
    指定index索引获取元素
    1)checkElementIndex检查索引
    2)node函数通过index获取Node实例,返回node.item元素。
     
     
    总结:
         1)插入,代替,删除操作耗时少
         2)查找操作耗时比较多
     
     
     
     
     
     
     
  • 相关阅读:
    flash as3笔记1
    C# api 得到机器名
    Windows命令行 命令大全
    Adobe SVG View 动态修改src的问题
    onekeyghost 备份系统
    WCF寄存于Windows服务,通过Form进行调用
    RDLC报表自定义数据集
    电气工程图形符号
    解决Extjs TextField回车事件后刷新页面问题
    C# Windows服务自动安装与注册
  • 原文地址:https://www.cnblogs.com/wspgbw/p/12083002.html
Copyright © 2020-2023  润新知