【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()

方法描述:清除链表

原文地址:https://www.cnblogs.com/yanphet/p/10385462.html

时间: 2024-10-14 05:04:44

【Java集合】LinkedList详解中篇的相关文章

另外几种Java集合框架详解续

另外几种Java集合框架详解续 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs fastutil库优于Trove库的地方:Trove库已经三年未更新了,属于非活跃的开源项目:而fastutil一直在更新.fastutil有更丰富的特性,支持超大的集合(大于2^32,即4GB的集合),文档也更丰富. fastutil是一个开源的Java集合框架的扩展,它继承了Java Collection Framework,提供了数

Java集合类型详解

这篇文章总结了所有的Java集合(Collection).主要介绍各个集合的特性和用途,以及在不同的集合类型之间转换的方式. Arrays Array是Java特有的数组.在你知道所要处理数据元素个数的情况下非常好用.java.util.Arrays 包含了许多处理数据的实用方法: Arrays.asList:可以从 Array 转换成 List.可以作为其他集合类型构造器的参数. Arrays.binarySearch:在一个已排序的或者其中一段中快速查找. Arrays.copyOf:如果你

java集合框架详解

前言: 数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework). Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应

java集合框架详解(一)

1.为什么有java集合框架 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的接口.类来实现基本的数据结构.这些类均在java.util包中.在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection Framework). Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对

Java集合框架详解(全)

一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下: 1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射关系的数据. 2)数组元素既可以是基本类型的值,也可以是对象:集合只能保存对象. Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:Li

java集合框架详解(二)、set接口

3.1.2 Set接口 首先我们应该知道Set是Collection接口的子接口 Set和Collection基本是一样的,但一点除外:Set无法记住添加的顺序,不允许包含重复的元素.一个不包含重复元素的 collection.更确切地讲,set 不包含满足e 1.equals(e 2)的元素对e 1和e 2,并且最多包含一个 null 元素. 有几点说明: 1.当试图添加两个相同元素进Set集合,添加操作会失败,add()方法返回false. 2.Set判断两个对象是否相等用equals,而不

Java集合用法详解

//1,java.util.Map import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; public class TestLinkedHashMap {   public static void main(String args[])   {    System.out.println("************************

Java集合-----Map详解

      Map与Collection并列存在.用于保存具有映射关系的数据:Key-Value      Map 中的 key 和  value 都可以是任何引用类型的数据      Map 中的 key 用Set来存放,不允许重复,即同一个,常用String类作为Map的“键”      key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的.确定的 value 1.HashMap HashMap是线程不安全的 package com.gather; impor

java内存泄露详解

很多人有疑问,java有很好的垃圾回收机制,怎么会有内存泄露?其实是有的,那么何为内存泄露?在Java中所谓内存泄露就是指在程序运行的过程中产生了一些对象,当不需要这些对象时,他们却没有被垃圾回收掉,而且程序运行中很难发现这个对象,它始终占据着内存却没有发挥作用. 我举这样一个例子,在现实开发中我们需要自定义一个先进后出的栈集合,代码如下: 这个代码看起来和运行起来都没问题,但是,这里有个很隐晦的问题,就是在pop()方法里面,我们首先找到集合最后一个元素的下标,然后按照下标从集合中取出,但是这