【Java集合】LinkedList详解中篇
这是关于LinkedList的第二篇文章,我将会源码分析LinkedList的部分重要代码,关键地方我都有注释说明,希望大家能比较明白的看懂!
分析源码按照顺序分析:
- 变量
- 构造方法
- 方法
一、变量

注意:如果一个链表没有节点,那么first和last都为null
二、构造方法

三、方法
1、linkFirst(E e)
方法描述:将e这个节点加入链表头

注意:
- 头节点的pre指针指向的是null,并没有指向尾节点,所以并不是循环双向链表。
- 如果当前链表只有一个节点,那么first和last指针均指向该节点
2、linkLast(E e)
方法描述:将e这个节点加入链表尾

注意:
- 尾节点的next指针指向的是null,并没有指向头节点,所以并不是循环双向链表。
- 如果当前链表只有一个节点,那么first和last指针均指向该节点
3、linkBefore(E e, Node succ)
方法描述:将e这个节点加入到不为空的succ节点之前

注意:
- 该方法是往【succ节点】前加节点,所以需要判断该节点是否是头节点,原因是需要更改first这个指针指向的节点
步骤:
- 构造新的节点,它的prev指向【succ节点】的前一个节点,它的next指向【succ节点】
- 【succ节点】的prev指向新的节点
- 【succ节点】的前一个节点的next指向新节点
4、unlinkFirst(Node f)
方法描述:去掉不为空的头节点

注意:
- 如果【f节点】不是头结点,那么【f节点】之前【包括f节点】都将从链表中断开丢掉,只是size的减一存在问题
步骤:
- first指针指向【下一个节点】
- 【f节点】的next不再指向【下一个节点】
5、unlinkLast(Node l)
方法描述:去掉不为空的尾节点

注意:
- 如果【l节点】不是尾结点,那么【尾节点】之后【包括l节点】都将从链表中断开丢掉,只是size的减一存在问题
步骤:
- last指针指向【上一个节点】
- 【上一个节点】的next指向null
6、unlink(Node x)
方法描述:去掉不为空的【x节点】

步骤:
- 【上一个节点】的next指针指向【下一个节点】,【x节点】prev指向null
- 【下一个节点】的prev指针指向【上一个节点】,【x节点】next指向null
7、简单方法的概括


8、add(E e)
方法描述:向链表插入1个元素

注意:
- add方法默认是加元素加入【尾节点】
9、remove(Object o)
方法描述:移除链表中某个节点

注意:
- 这里判断了【被移除元素】是否为null的情况,为空则==即可,如果不为null,则需要equals来判断是否相等
- == 和 equals的区别小伙伴们有兴趣可以查一查
10、addAll
方法描述:添加新的节点到链表中

11、clear()
方法描述:清除链表

【Java集合】LinkedList详解中篇的更多相关文章
- java集合框架详解
java集合框架详解 一.Collection和Collections直接的区别 Collection是在java.util包下面的接口,是集合框架层次的父接口.常用的继承该接口的有list和set. ...
- Java集合框架详解(全)
一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下 ...
- Java—集合框架详解
一.描述Java集合框架 集合,在Java语言中,将一系类的对象看成一个整体. 首先查看jdk中的Collection类的源码后会发现Collection是一个接口类,其继承了java迭代接口Iter ...
- Java集合-----List详解
List中的元素是有序排列的而且可重复 1.LinkedList LinkedList是非线程安全的,底层是基于双向链表实现的 LinkedList常用方法: toArray() ...
- JAVA集合类型详解
一.前言 作为java面试的常客[集合类型]是永恒的话题:在开发中,主要了解具体的使用,没有太多的去关注具体的理论说明,掌握那几种常用的集合类型貌似也就够使用了:导致这一些集合类型的理论有可能经常的忘 ...
- Java的LinkedList详解,看源码之后的总结
1. LinkedList实现了一个带表头的双向循环链表: 2. LinkedList是线程不同步的: 3. LinkedList中实现了push.pop.peek.empty等方法,因此Linked ...
- Java集合-----Set详解
Set是没有重复元素的集合,是无序的 1.HashSet HashSet它是线程不安全的 HashSet常用方法: add(E element) 将指定的元素添加到此集合(如果尚未存 ...
- Java集合-----Map详解
Map与Collection并列存在.用于保存具有映射关系的数据:Key-Value Map 中的 key 和 value 都可以是任何引用类型的数据 Map 中的 ...
- 【Java集合】LinkedList详解前篇
[Java集合]LinkedList详解前篇 一.背景 最近在看一本<Redis深度历险>的书籍,书中第二节讲了Redis的5种数据结构,其中看到redis的list结构时,作者提到red ...
随机推荐
- IIS只允许某些IP访问
1. 2. 3.访问时提示 4.设置允许访问的IP 5.指定的IP访问时没问题了,而其他的IP不允许访问
- loj #2305. 「NOI2017」游戏
#2305. 「NOI2017」游戏 题目描述 小 L 计划进行 nnn 场游戏,每场游戏使用一张地图,小 L 会选择一辆车在该地图上完成游戏. 小 L 的赛车有三辆,分别用大写字母 AAA.BBB. ...
- loj #2013. 「SCOI2016」幸运数字
#2013. 「SCOI2016」幸运数字 题目描述 A 国共有 n nn 座城市,这些城市由 n−1 n - 1n−1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以 ...
- shell-003:用for循环统计内存使用量
shell-100主要是用于练习! #!/bin/bash # 统计内存的使用量(这里用ps统计) # 第一步:不打印第一行,这里的sed ‘1d’ 去掉 for n in `ps aux |sed ...
- springcloud微服务总结四 负载均衡
一:Ribbon简介 Ribbon是Netflix公司开源的一个负载均衡的项目,是一个客户端负载均衡器,运行在客户端上.它是一个经过了云端测试的IPC库,可以很好地控制HTTP和TCP客户端的一些行为 ...
- UVA - 11584 DP 最少线段覆盖
题意:用最少的不可交线段覆盖整个区间,求该最小值 课上摸鱼的时候没注意到题意的转换,写了没啥卵用的回文中心最长枚举,所以代码里的st和h/h2是几乎没用的 注意状态转移的时候不要只用最长线段去转移,这 ...
- 基于pydpier爬取1药网(转载)
1.商品爬取 #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2019-02-02 08:59:40 # Project: o ...
- 转: centos系统home下的中文目录改为英文目录
转自h t t p : / /xugang-1017-126-com.iteye.com/blog/2081845 如果安装了中文版的Cent OS之后,root目录和home目录下会出现中文的路径名 ...
- oracle 备份恢复篇(三)---rman spfile的丢失
一,环境准备 1, 拥有全备 数据 2, 查看spfile文件位置 SQL> SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER ...
- Docker概念学习系列之Docker是什么?(1)
不多说,直接上 干货! Docker是什么? 见[博主]撰写的 https://mp.weixin.qq.com/s/iWAzj7baD93hexsVJ7pBfQ Docker是一个开源的应用容 ...