【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 ...
随机推荐
- query flot 直方图上显示对应的y值
方法1:使用在图上加 相对定位的 div 提示对应的直方图数量. 具体实现:获取直方图上所有的点,得到y值和对应的坐标位置,插入相对div 主要js代码:plot 为对应的图对象 //初始化柱状图数据 ...
- Mysql数据库申请
前段时间大部门下新成立了一个推广百度OCR.文字识别.图像识别等科技能力在金融领域应用的子部门.因为部门刚成立,基础设施和人力都是欠缺的.当时分到我们部门的任务是抽调一个人做新部门主站前端开发工作.本 ...
- Python3之uuid模块
一. 简介 UUID是128位的全局唯一标识符,通常由32字节的字母串表示.它可以保证时间和空间的唯一性,也称为GUID. 全称为:UUID--Universally Unique IDentifie ...
- 【BZOJ1880】[SDOI2009]Elaxia的路线 (最短路+拓扑排序)
[SDOI2009]Elaxia的路线 题目描述 最近,\(Elaxia\)和\(w**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. \(El ...
- JDBC_PreparedStatement用法_占位符_参数处理
import java.sql.Connection; import java.sql.Date;import java.sql.DriverManager;import java.sql.Prepa ...
- java10:基于时间的版本控制
功能发布 从Java 10开始,采用了一种新的严格的基于时间的发布模式. 在这个新模型中,Java平台的主要版本(现称为功能版本)将每6个月(3月和9月)发布一次. 功能版本将包含语言功能,JVM功能 ...
- ubuntu 16.04 安装googlepinyin中文输入法
安装谷歌拼音输入法 打开终端输入: apt-get install fcitx-googlepinyin 安装完成之后,进入系统设置 安装语言包 修改输入法系统 点击“System Setting”- ...
- python学习之路---day19--面向对象--约束
约束和异常一:约束: 约束方法:(解释:就相当于在想项目中,先提前规划好框架和约定基本代码,像定义好调用的名字后,后面的名字只能用这个,用其他的 名字就会抛出异常.错误) 1:提取父类,然后再父类中定 ...
- Android 生成xml文件及xml的解析
1.生成xml文件的两种方式 (1)采用拼接的方式生成xml(不推荐使用) (2)利用XmlSerializer类生成xml文件 package com.example.lucky.test52xml ...
- LeetCode10. 正则表达式匹配
10. 正则表达式匹配 描述 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该 ...