LinkedList类源码浅析(一)
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类源码浅析(一)的更多相关文章
- LinkedList类源码浅析(二)
1.上一节介绍了LinkedList的几个基本的方法,其他方法类似,就不一一介绍: 现在再来看一个删除的方法:remove(Object o) remove方法接受一个Object参数,这里需要对参数 ...
- Long类源码浅析
1.Long类和Integer相类似,都是基本类型的包装类,类中的方法大部分都是类似的: 关于Integer类的浅析可以参看:Integer类源码浅析 2.这里主要介绍一下LongCache类,该缓存 ...
- [原创]Android系统中常用JAVA类源码浅析之HashMap
由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...
- ArrayList类源码浅析(一)
1.首先来看一下ArrayList类中的字段 可以看出,ArrayList维护了一个Object数组,默认容量是10,size记录数组的长度: 2.ArrayList提供了三个构造器:ArrayLis ...
- java.lang.Byte 类源码浅析
Byte 类字节,属于Number. public final class Byte extends Number implements Comparable<Byte> { /** * ...
- ArrayList类源码浅析(三)
1.看一个示例 运行上述代码,抛出一个异常: 这是一个典型的并发修改异常,如果把上述代码中的125行注释,把126行打开,运行就能通过了: 原因: 1)因为在迭代的时候,使用的是Itr类的对象,在调用 ...
- ArrayList类源码浅析(二)
1.removeAll(Collection<?> c)和retainAll(Collection<?> c)方法 第一个是从list中删除指定的匹配的集合元素,第二个方法是用 ...
- Integer类源码浅析
1.首先Integer提供了两类工具类,包括把一个int类型转成二进等, 其实执行转换算法只有一个方法: public static String toString(int i, int radix) ...
- Jdk1.8 之 Integer类源码浅析
先看一下它的继承.实现关系: public final class Integer extends Number implements Comparable<Integer> Number ...
随机推荐
- Linux-1.2关机重启reboot,shutdown
关机重启:reboot,shutdown reboot 重启操作系统 shutdown -r now 重启,shutdown会给其他用户提示
- js制作留言板
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- luogu题解 P1099 【树网的核】树的直径变式+数据结构维护
题目链接: https://www.luogu.org/problemnew/show/P1099 https://www.lydsy.com/JudgeOnline/problem.php?id=1 ...
- nginx(五)- linux下安装nginx与配置
linux系统为Centos 64位 准备目录 [root@instance-3lm099to ~]# mkdir /usr/local/nginx [root@instance-3lm099to ~ ...
- yarn的安装步骤
yarn依赖npm,是npm中的一个包 https://www.npmjs.com/package/yarn 1.安装 npm i -g -yarn 2.测试是否安装成功 yarn --vresion ...
- ubuntu 创建定时备份pg数据库定时任务
ubuntu创建定时备份数据库定时任务 一.命令文件 创建db_back.sh #!/bin/bash echo "start backup" /usr/lib/postgresq ...
- python中re模块
1.定义 正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配.re模块使得python拥有全部的正则表达式功能. 2.用途 通过使用正则表达式,可以:测试字符串内的模式.—— 例 ...
- 《python解释器源码剖析》第0章--python的架构与编译python
本系列是以陈儒先生的<python源码剖析>为学习素材,所记录的学习内容.不同的是陈儒先生的<python源码剖析>所剖析的是python2.5,本系列对应的是python3. ...
- oracle 清空当前用户所有对象
BEGIN FOR REC IN (SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS WHERE OBJECT_TYPE='PROCEDURE' OR ...
- 02bag模板
cost->体积 weight->价值 hdu2844 可达/不可达 #include <stdio.h> #include <algorithm> ...