`

java LinkedList源码分析

    博客分类:
  • java
阅读更多

首先介绍一下java集合,集合接口Collection,子接口List,Set,Queue。

 

LinkedList就是子结构List的一个现实。并且它实现了其他接口,如Deque<E>-double ended queue双向队列,还有Cloneable, java.io.Serializable可克隆和可序列化结构,以及List下的子接口AbstractSequentialList顺序获取结构。

 

LinkedList的特点,它适用于需要频繁添加删除的集合,因为他的添加删除速度远高于ArrayList,并且顺序遍历的速度也高于ArrayList,但是它不适合随机获取数据。

以用thinking in java :

--------------------------------------意思与上文相同,嫌眼晕的同学直接略过这段----------------------------------------

List:

 

Order is the most important feature of a L i s t ; it promises to maintain elements (interface) in a particular sequence. L i s t adds a number of methods to C o l l e c t i o n that allow insertion and removal of elements in the middle of a L i s t . (This is recommended only for a L i n k e d L i s t . ) A L i s t will produce a L i s t I t e r a t o r , and using this you can traverse the L i s t in both directions, as well as insert and remove elements in the middle of the list (again, recommended only for a L i n k e d L i s t ).

 

LinkedList:

 

Provides optimal sequential access, with inexpensive insertions and deletions from the middle of the list. Relatively slow for random access. (Use A r r a y L i s t instead.) Also has a d d F i r s t ( ) , a d d L a s t ( ) , g e t F i r s t ( ) , g e t L a s t ( ),r e m o v e F i r s t ( ) , and r e m o v e L a s t ( ) (which are not defined in any interfaces or base classes) to allow it to be used as a stack, a queue, and a dequeue.

 

--------------------------------------意思与上文相同,嫌眼晕的同学直接略过这段----------------------------------------

 

LinkedList的实现原理,LinkedList顾名思义,就是一个双向列表,每一个节点为Entry,数据推送完全就是链表的操作,所以他的插入,删除的速度快,但是用index查找就费劲了

 

LinkedList的关键源码分析:

 

 

 private transient Entry<E> header = new Entry<E>(null, null, null);

 这个成员变量是LinkedList的关键,它在链表中没有实际数据意义,是链表的标示(要是难理解,就通俗一点理解成链表第一个无意义的元素),而且transient修饰,标示着他不会被序列化。header也可以当做队列末尾的元素,因为是双向列表,所以header.next末尾元素后边的元素就成了队首元素了,知道了这些,看一下下边的添加方法

 

 

 public void addFirst(E e) {
	addBefore(e, header.next);
    }

 public void addLast(E e) {
	addBefore(e, header);
    }

 以上是两个添加的函数,以这两个函数,讲解一下LinkedList是如何向集合推送元素的

 addFirst向队列头加元素,是将元素加到header.next-队首元素之前;

 addLast向队列未加元素,是将元素加到header之前;

 

下面看一下addBefore(E e,Entry<E> entry)函数

 

private Entry<E> addBefore(E e, Entry<E> entry) {
	Entry<E> newEntry = new Entry<E>(e, entry, entry.previous); //初始化当前链表节点
	newEntry.previous.next = newEntry;//改变当前节点前后的链表节点连接状态
	newEntry.next.previous = newEntry;
	size++;
	modCount++;
	return newEntry;
    }

 Entry的数据结构是:

 

 private static class Entry<E> {
	E element; // 当前元素
	Entry<E> next; // 之后的元素,靠近last
	Entry<E> previous; // 之前的元素,靠近first

	Entry(E element, Entry<E> next, Entry<E> previous) {
	    this.element = element;
	    this.next = next;
	    this.previous = previous;
	}
    }
 

明白LinkedList的数据结构和推送方式,那么其他的操作原理也就迎刃而解,讲解也就到这里,其他的代码留给有心人,愿大家技术和综合素质都共同进步

 

 

 


 

 

1
2
分享到:
评论
1 楼 liuyes 2012-07-10  
子接口?Map?

相关推荐

    Java LinkedList源码分析

    简介  LinkedList 是一个常用的集合类,用于顺序存储元素。 LinkedList 经常和 ArrayList 一起被提及。...本文分析 LinkedList 的具体实现。  继承关系  public class LinkedList  extends AbstractS

    LinkedList源码分析_016.pdf

    《LinkedList源码解析》 LinkedList是Java集合框架中的一员,它是AbstractSequentialList的子类,同时也实现了List、Deque和Cloneable、Serializable接口。LinkedList作为双向链表,支持快速的添加、删除元素,尤其...

    Java集合系列之LinkedList源码分析

    Java集合系列之LinkedList源码分析 概述: 本文详细介绍了Java集合系列之LinkedList的源码分析,主要介绍了LinkedList的底层实现、成员变量、构造器、增删改查方法等。LinkedList是一种基于双向链表的数据结构,...

    LinkedList源码学习分析

    《LinkedList源码学习分析》 LinkedList作为Java集合框架中的一员,是基于链表数据结构实现的线程不安全容器。本文将深入探讨LinkedList的实现原理、核心方法的代码实现,并对比ArrayList,理解其特性和使用场景。 ...

    LinkedList源码分析

    ### LinkedList源码分析 #### 一、概述 `LinkedList` 是 Java 集合框架中的一个重要组成部分,它基于双向链表实现。与基于数组的 `ArrayList` 相比,`LinkedList` 在插入和删除操作上更为高效,因为它只需要改变...

    计算机后端-Java-Java核心基础-第24章 集合01 15. LinkedList的源码分析.avi

    计算机后端-Java-Java核心基础-第24章 集合01 15. LinkedList的源码分析.avi

    LinkedList 部分源码

    ### LinkedList部分源码解析 #### 一、简介 `LinkedList`是Java集合框架的一个重要组成部分,它基于双向链表实现,既支持`List`接口也实现了`Deque`接口,因此可以作为列表、栈或者队列使用。双向链表的每个节点...

    java LinkedList源码详解及实例

    3. **源码分析**: - `getFirst()`和`getLast()`通过直接访问`first`和`last`属性来获取元素,这两个属性分别保存链表的第一个和最后一个节点。 - `removeFirst()`和`removeLast()`通过`unlinkFirst(Node&lt;E&gt; f)`和...

    JAVA利用LinkedList构造栈与队列

    在Java编程语言中,LinkedList是一个常用的集合类,它实现了List接口,同时也提供了双向链表的实现...在阅读和分析给定的Queue.java和Stack.java文件时,可以从实现原理、方法调用、线程安全等方面进行深入学习和理解。

    Map+List+ArrayList+LinkedList Java源码

    **源码分析** 深入研究这些类的源码,可以帮助我们理解它们是如何在内存中组织数据以及如何执行各种操作的。例如,`HashMap`的哈希函数如何计算元素的桶位置,`ArrayList`如何调整其容量,以及`LinkedList`如何通过...

    【死磕Java集合】-集合源码分析.pdf

    一、LinkedList源码分析 LinkedList是一种以双向链表实现的List,它除了作为List使用,还可以作为队列或者栈来使用。它实现了List、Queue和Deque接口,使其具有多种使用场景。 LinkedList的继承体系中,它继承了...

    Java 集合之LinkedList源码分析

    Java API中提供了链表的Java实现—LinkedList下。LinkedList是通过节点的连接实现链表的数据结构,向linkedList中插入或删除元素的速度是特别快,而随机访问的速度相对较慢,这个是由于链表本身的性质造成的,在链表...

    Java源码分析Iterable.pdf

    Java源码分析Iterable Java源码分析Iterable是Java编程语言中一个基础组件的源码分析,Iterable是一个接口,它允许对象被迭代,例如foreach循环中的数组或集合。了解Iterable的源码,可以帮助开发者更好地理解Java...

    Java基于JDK 1.8的LinkedList源码详析

    "Java基于JDK 1.8的LinkedList源码详析" LinkedList是Java中一个非常重要的数据结构,基于双向链表实现,适用于增删频繁且查询不频繁的场景。今天我们将深入分析LinkedList的源码,了解其内部实现机制和特点。 1. ...

    JDK1.6中Arraylist,Vector,LinkedList源码

    源码分析时,可以关注以下几个关键点: 1. 容量管理:观察ArrayList和Vector如何进行扩容,了解它们扩容的策略和成本。 2. 插入和删除:比较ArrayList、Vector和LinkedList在插入和删除元素时的代码实现,分析时间...

    Java源码大全

    Java源码大全是一个集合了各种Java编程基础知识和经典算法的资源包,对于Java初学者以及有一定经验的开发者来说,都是一...通过这个压缩包,你可以系统地学习Java语言,掌握各种编程技巧,以及提升算法设计和分析能力。

    Java1.6源码

    2. **集合框架**:Java 1.6的集合框架在`java.util`包中,包括`List`、`Set`、`Map`接口及其实现类如`ArrayList`、`LinkedList`、`HashSet`、`HashMap`等。源码分析可以揭示它们的内部数据结构和操作算法,比如`...

    corejava7源码

    《Core Java 7源码分析》 在Java编程领域,Core Java系列书籍是广大开发者学习和进阶的重要参考资料。Core Java 7,即《Core Java Volume I - Fundamentals》的第七版,它深入探讨了Java语言的核心特性,包括面向...

    常见的java集合源码分析,以及面试题

    本文将深入剖析Java集合的源码,探讨其内部实现机制,并结合常见面试题,帮助你更好地理解和应用这些知识。 首先,我们从基础开始,Java集合框架主要分为两大类:List(列表)和Set(集合)。List接口包括ArrayList...

    贪吃蛇Java源码分析

    在本篇贪吃蛇Java源码分析中,我们聚焦于两个关键文件——`GreedSnake.java` 和 `SnakeModel.java`,均由C.Jason编写。这两个文件共同构成了一个基于Java的贪吃蛇游戏。让我们详细探讨一下源码中的重要概念和实现...

Global site tag (gtag.js) - Google Analytics