1、先来看一看LinkedList类的字段和构造方法

size记录链表的长度,first永远指向链表的第一个元素,last永远指向链表的最后一个元素

提供两个构造方法,一个无参的构造方法,一个接受一个Collection对象为参数的构造方法

first和last的类型都是Node,Node是LinkedList类中的一个私有的静态内部类,定义非常简单

Node类中定义了三个字段,数据域item,后继元素next,前驱元素prev,而且都是接受泛型的

2、来看第一个方法linkFirst(E e)

这是在链表的头部添加一个元素

  1)如果链表为空时,first和last都指向同一个节点

  2)如果链表不为空,则在第一个元素之前插入新节点,并让first指向新的节点;

由上述可知:

LinkedList是一个链式结构,由两个指针分别指向第一个节点和最后一个节点,中间的节点由next和prev链式指向;

因为存在next和prev两个域,LinkedList是一个双向的结构,构成双向链表;

每插入一个新的元素,都会创建一个新的Node节点对象;

3、从链表头部删除一个元素:unlinkFirst(Node<E> f)

从双向链表的头部删除一个元素,并返回删除元素的数据域;

得到first指向元素的后继,如果没有后继元素,直接把last置空,如果有后继元素,则把这个后继元素的prev域置空;

4、从链表中删除一个元素:E unlink(Node<E> x)

从上述删除过程中需要注意的是,前驱和后继元素可能为空;如果为空就需要对first和last两个指针做特殊处理;

LinkedList类源码浅析(一)的更多相关文章

  1. LinkedList类源码浅析(二)

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

  2. Long类源码浅析

    1.Long类和Integer相类似,都是基本类型的包装类,类中的方法大部分都是类似的: 关于Integer类的浅析可以参看:Integer类源码浅析 2.这里主要介绍一下LongCache类,该缓存 ...

  3. [原创]Android系统中常用JAVA类源码浅析之HashMap

    由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...

  4. ArrayList类源码浅析(一)

    1.首先来看一下ArrayList类中的字段 可以看出,ArrayList维护了一个Object数组,默认容量是10,size记录数组的长度: 2.ArrayList提供了三个构造器:ArrayLis ...

  5. java.lang.Byte 类源码浅析

    Byte 类字节,属于Number. public final class Byte extends Number implements Comparable<Byte> { /** * ...

  6. ArrayList类源码浅析(三)

    1.看一个示例 运行上述代码,抛出一个异常: 这是一个典型的并发修改异常,如果把上述代码中的125行注释,把126行打开,运行就能通过了: 原因: 1)因为在迭代的时候,使用的是Itr类的对象,在调用 ...

  7. ArrayList类源码浅析(二)

    1.removeAll(Collection<?> c)和retainAll(Collection<?> c)方法 第一个是从list中删除指定的匹配的集合元素,第二个方法是用 ...

  8. Integer类源码浅析

    1.首先Integer提供了两类工具类,包括把一个int类型转成二进等, 其实执行转换算法只有一个方法: public static String toString(int i, int radix) ...

  9. Jdk1.8 之 Integer类源码浅析

    先看一下它的继承.实现关系: public final class Integer extends Number implements Comparable<Integer> Number ...

随机推荐

  1. js日期相关方法

    /** * ===================================== * 日期相关方法 * ===================================== */ ;(fu ...

  2. redis 学习(6)-- 集合类型

    redis 学习(6)-- 集合类型 set 结构 无序 无重复 集合间操作 set 集合内操作 命令 含义 sadd key memebr1 [member2...] 向集合中添加一个或多个成员 s ...

  3. 无法发布-旧项目发布时出现:该项目中不存在目标“GatherAllFilesToPublish”。

    在项目文件夹下面找到 xxxx.csproj 文件,使用 VisualStudio Code 打开(或者任意编辑器,VisualStudio 可能无法编辑) 将以下节点进行更改 <Import ...

  4. SQLServer 存储过程详解

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  5. 09 Python两种创建类的方式

    第一种比较普遍的方式: class Work(): def __init__(self,name): self.name = name w = Work('well woker') 这样就简单创建了一 ...

  6. PHP--API

    PHP所有能力都是函数,内置1000多个函数,不是每一个函数都默认直接可以使用,有一些需要安装或者启用额外的“插件”扩展. 1,获取字符串长度 <?php $str='hello'; echo ...

  7. Visual Studio 2010中的js注释

    Visual Studio 2010中的js注释已经很强大了,但怎么才能和调用c#的方法一样容易呢?怎样才能让每个参数都有注释说明呢?底下就是想要的答案. 先上图,如图所示: 其中红色的办法为注释效果 ...

  8. vscode常用插件列表

    vscode插件 备注 Markdown PDF 把markdown文件转换成别的文件 Markdown TOC markdown文件目录生成 PHP Debug PHP调试 PHP Intenlli ...

  9. Linux和Windows双系统下Windows系统插入耳机没有声音

    我的笔记本装了Windows7和Debian双系统后,在Windows7下,插入耳机竟然没有声音. 按常规思路分析:首先考虑是耳机问题还是笔记本电脑问题.确定耳机没问题后问题就在笔记本身上了.而问题在 ...

  10. Windwos Java‘bat 环境变量配置脚本

    @echo off echo 正在设置Java环境变量 pause wmic ENVIRONMENT create name="JAVA_HOME",username=" ...