LinkedList

LinkedList是通过双向链表去实现的,他的数据结构具有双向链表的优缺点,既然是双向链表,那么的它的顺序访问效率会非常高,而随机访问的效率会比较低,它包含一个非常重要的私有内部静态类:Node

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;
  }
}

get方法:本质上还是遍历链表中的数据

    Node<E> node(int index) {
       // assert isElementIndex(index);
// index 和 长度的一半比较
       if (index < (size >> 1)) {
           Node<E> x = first;
           // 从头开始循环
           for (int i = 0; i < index; i++)
               x = x.next;
           return x;
      } else {
           Node<E> x = last;
           // 从尾部开始循环
           for (int i = size - 1; i > index; i--)
               x = x.prev;
           return x;
      }
  }

set方法

public E set(int index, E element) {
   checkElementIndex(index);// 检查下标是否合法
   Node<E> x = node(index); // 根据下标获取对应的node对象
   E oldVal = x.item; // 记录原来的值
   x.item = element; // 赋予新的值
   return oldVal; // 返回修改之前的值
}

LinkedList的源码的更多相关文章

  1. LinkedList的源码分析

    1. LinkedList的定义  1.1  继承于AbstractSequentialList的双向链表,可以被当作堆栈.队列或双端队列进行操作 1.2  有序,非线程安全的双向链表,默认使用尾部插 ...

  2. LinkedList 的源码分析

    LinkedList是基于双向链表数据结构来存储数据的,以下是对LinkedList  的 属性,构造器 ,add(E e),remove(index),get(Index),set(inde,e)进 ...

  3. ArrayList和LinkedList的源码学习,理解两者在插入、删除、和查找的性能差异

    List的使用 List的子类 1). ArrayList 数据结构:数组 2). Vector 数据结构:数组 3). LinkedList 数据结构:循环双向链表 ArrayList .Vecto ...

  4. JDK1.8 LinkedList双向链表源码

    序言 LinkedList是一个双向链表 也就是说list中的每个元素,在存储自身值之外,还 额外存储了其前一个和后一个元素的地址,所以也就可以很方便地根据当前元素获取到其前后的元素 链表的尾部元素的 ...

  5. LinkedList 添加元素源码解析

    jdk版本:1.8 LinkedList添加元素有两个方法:add(E e)和add(int index,E e). add(E e) /** * Appends the specified elem ...

  6. Java的LinkedList底层源码分析

    首先我们先说一下,源码里可以看出此类不仅仅用双向链表实现了队列数据结构的功能,还提供了链表数据结构的功能.

  7. LinkedList<E>源码分析

    LinkedList的数据结构就是双向链表,如下所示: private static class Node<E> { E item;//数据元素 Node<E> next;// ...

  8. java8集合--LinkedList纯源码

    package Queue; import java.util.*; import java.util.function.Consumer; /** * 双端队列主要实现list接口和Deque接口, ...

  9. LinkedList的源码分析(基于jdk1.8)

    1.初始化 public LinkedList() { } 并未开辟任何类似于数组一样的存储空间,那么链表是如何存储元素的呢? 2.Node类型 存储到链表中的元素会被封装为一个Node类型的结点.并 ...

  10. LinkedList类源码浅析(二)

    1.上一节介绍了LinkedList的几个基本的方法,其他方法类似,就不一一介绍: 现在再来看一个删除的方法:remove(Object o) remove方法接受一个Object参数,这里需要对参数 ...

随机推荐

  1. performance.timing:利用performance.timing进行性能分析

    window.onload = function(){ setTimeout(function(){ let t = performance.timing console.log('DNS查询耗时 : ...

  2. 剖析Air724UG的硬件设计,有大发现?04篇

    ​ 接下来分享第四部分. 5.4 功耗 5.4.1 模块工作电流 测试仪器:综测仪 R&S CMW500,程控电源 安捷伦 66319D 测试条件:VBAT=3.8V,环境温度 25℃,插入白 ...

  3. Apache Shiro 721反序列化漏洞复现

    目录 漏洞原理 复现 修复方式 漏洞原理 Shiro 的RememberMe Cookie使用的是 AES-128-CBC 模式加密.其中 128 表示密钥长度为128位,CBC 代表Cipher B ...

  4. SharpZipLib解压.tar.gz

    上一篇文章我们说了如何用SharpZipLib来压缩.tar.gz,这篇文章我们来看看如何解压. 直接上代码: using ICSharpCode.SharpZipLib.GZip; using IC ...

  5. ZCMU-1111

    与背包和动态规划有关(我认为) 采用dp数组存放吃掉i千克食物要用掉的钱 dp最开始要尽量的大方便过程中判断和最后的输出判断 实时更新dp,保留最小的钱 以前不知道的 printf函数可以这样用 fi ...

  6. Node.js 模拟Apache服务器

    1.知识必备 (1)当服务器响应不同文件类型时,需要设置响应报文头,让浏览器选择相应的编码解析数据. 常用对照表HTTP Mime-type: https://tool.oschina.net/com ...

  7. canvas(五)绘制文本

    1.绘制描边文本 说明:描边的属性是共用的,无论是绘制直线还是文字,所以有需要的话要单独设置描边颜色,相关语法如下 语法 说明 ctx.strokeStyle 设置描边的颜色(文本颜色) ctx.fo ...

  8. 为什么你用的 MyBatis 慢?一行配置让它性能翻倍!

    为什么你用的 MyBatis 慢?一行配置让它性能翻倍! 在 Java 后端开发的江湖里,MyBatis 堪称一员大将,凭借着灵活的 SQL 编写.方便的数据库对接能力,深受广大开发者的喜爱.但不少小 ...

  9. electron postinstall$ node install.js报错

    本来以为是文件路径错了执行失败,手动去执行了下install.js,还是报错,但是不一样是连接超时 试了几种办法,简单直接就是如下方法 1:从项目node_modules中找到electron下的in ...

  10. Mysql的个人习惯

    一定要有主键 一般使用的innodb引擎中会根据主健创建聚簇索引,这种方式会使得数据排列的更连续,减少随机IO 关于数据长度 考虑数据范围,够用的前提下,数据长度是越简单越好,数据类型是越小越好. 尽 ...