- 浏览: 188347 次
- 性别:
- 来自: 上海
文章分类
最新评论
首先介绍一下java集合,集合接口Collection,子接口List,Set,Queue。
LinkedList就是子结构List的一个实现。并且它实现了其他接口,如Deque<E>-double ended queue双向队列,还有Cloneable, java.io.Serializable可克隆和可序列化结构,以及List下的子接口AbstractSequentialList顺序获取结构。
LinkedList的特点,它适用于需要频繁添加删除的集合,因为他的添加删除速度远高于ArrayList,并且顺序遍历的速度也高于ArrayList,但是它不适合随机获取数据。
LinkedList的实现原理,LinkedList顾名思义,就是一个双向列表,每一个节点为Entry,数据推送完全就是链表的操作,所以他的插入,删除的速度快,但是用index查找就费劲了
LinkedList的关键源码分析:
Java代码 收藏代码
private transient Entry<E> header = new Entry<E>(null, null, null);
这个成员变量是LinkedList的关键,它在链表中没有实际数据意义,是链表的标示(要是难理解,就通俗一点理解成链表第一个无意义的元素),而且transient修饰,标示着他不会被序列化。header也可以当做队列末尾的元素,因为是双向列表,所以header.next末尾元素后边的元素就成了队首元素了,知道了这些,看一下下边的添加方法
Java代码 收藏代码
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)函数
Java代码 收藏代码
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的数据结构是:
Java代码 收藏代码
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的数据结构和推送方式,那么其他的操作原理也就迎刃而解,讲解也就到这里,其他的代码留给有心人,愿大家技术和综合素质都共同进步
LinkedList就是子结构List的一个实现。并且它实现了其他接口,如Deque<E>-double ended queue双向队列,还有Cloneable, java.io.Serializable可克隆和可序列化结构,以及List下的子接口AbstractSequentialList顺序获取结构。
LinkedList的特点,它适用于需要频繁添加删除的集合,因为他的添加删除速度远高于ArrayList,并且顺序遍历的速度也高于ArrayList,但是它不适合随机获取数据。
LinkedList的实现原理,LinkedList顾名思义,就是一个双向列表,每一个节点为Entry,数据推送完全就是链表的操作,所以他的插入,删除的速度快,但是用index查找就费劲了
LinkedList的关键源码分析:
Java代码 收藏代码
private transient Entry<E> header = new Entry<E>(null, null, null);
这个成员变量是LinkedList的关键,它在链表中没有实际数据意义,是链表的标示(要是难理解,就通俗一点理解成链表第一个无意义的元素),而且transient修饰,标示着他不会被序列化。header也可以当做队列末尾的元素,因为是双向列表,所以header.next末尾元素后边的元素就成了队首元素了,知道了这些,看一下下边的添加方法
Java代码 收藏代码
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)函数
Java代码 收藏代码
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的数据结构是:
Java代码 收藏代码
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的数据结构和推送方式,那么其他的操作原理也就迎刃而解,讲解也就到这里,其他的代码留给有心人,愿大家技术和综合素质都共同进步
发表评论
文章已被作者锁定,不允许评论。
-
ReentrantLock与Condition
2017-03-17 14:25 526多线程和并发性并不是什么新内容,但是 Java 语言设计中的创 ... -
java linux监控
2017-03-13 17:49 483http://agapple.iteye.com/blog/1 ... -
transient和volatile两个关键字
2017-02-16 09:47 572transient和volatile两个关 ... -
java 锁机制
2016-12-09 13:43 465一段synchronized的代码被 ... -
java 正则表达式
2016-12-02 10:28 516众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字 ... -
java ClassNotFoundException和NoClassDefFoundException的差别
2016-08-17 19:47 907首先从名字上可以看出一类是异常,一类属于错误。异常可以通过异常 ... -
ThreadLocal
2016-07-19 11:10 327ThreadLocal是什么 Thre ... -
java CAS
2016-07-10 14:55 333cas 乐观锁每次不锁定整个线程,在操作之前进行判断。悲观锁独 ... -
concurrenthashmap
2016-07-10 11:11 422hash table虽然性能上不如 ... -
java 线程池的使用
2016-07-10 09:52 3721. 引言 合理利用线程池能够带来三个好处。第一:降低资源消 ... -
java.util.concurrent
2016-07-03 16:24 409我们都知道,在JDK1.5之 ... -
JVM 配置 以及垃圾收集器的选择
2016-04-15 12:36 728JVM监控的关键指标说明: a) FGC的环比增加次数。Zab ... -
jvm实时监控工具
2016-04-09 09:35 461 -
哈希 、一致性哈希、余数式哈希
2016-04-07 16:10 861什么是Hash Hash,一 ... -
jvm dump 相关
2016-03-22 17:22 681http://www.cnblogs.com/edwardla ... -
深入剖析volatile关键字
2016-03-21 16:02 534深入剖析volatile关键字 ... -
java线程安全问题之静态变量、实例变量、局部变量
2016-03-08 12:52 571java多线程编程中,存在很多线程安全问题,至于什么是线程安全 ... -
有状态的bean和无状态的bean的区别
2016-03-08 11:23 1493有状态会话bean :每个用户有自己特有的一个实例,在用户的生 ... -
Java nio详解
2016-01-20 16:30 551http://www.ibm.com/developerwor ... -
java 不定长数组
2015-11-24 15:00 768在调用某个方法时,若是方法的参数个数事先无法确定该如何处理 ...
相关推荐
《LinkedList源码学习分析》 LinkedList作为Java集合框架中的一员,是基于链表数据结构实现的线程不安全容器。本文将深入探讨LinkedList的实现原理、核心方法的代码实现,并对比ArrayList,理解其特性和使用场景。 ...
在Java编程语言中,LinkedList是一个常用的集合类,它实现了List接口,同时也提供了双向链表的实现...在阅读和分析给定的Queue.java和Stack.java文件时,可以从实现原理、方法调用、线程安全等方面进行深入学习和理解。
在IT领域,特别是Java编程中,ArrayList和LinkedList是两种非常重要的数据结构,它们都是List接口的实现类。理解这两者的区别对于优化程序性能...通过深入学习和实践,可以更好地利用这些数据结构提升程序效率和质量。
通过这个压缩包,你可以深入理解链表的内部工作原理,学习如何在实际问题中运用链表,同时也能为面试和笔试做好准备。这些代码示例不仅提供了功能实现,还可能包含了对复杂算法和数据结构优化的思考,对于提升编程...
在查看提供的源码时,你可以深入理解LinkedList内部节点结构的实现,以及这些方法的底层逻辑。例如,LinkedList的节点类(Node)通常包含元素值和对前后节点的引用。通过分析源码,你可以更好地了解其在不同场景下的...
Java编程语言中的`Map`, `List`, `ArrayList` 和 `LinkedList` 是四个核心的数据结构,它们在实际开发中...通过学习这些源码,开发者可以更好地选择适合场景的数据结构,优化代码性能,解决潜在问题,并提升编程能力。
通过对这个自定义LinkedList的深入学习,你可以更深入地理解Java的链表数据结构、泛型的使用以及反射的强大能力。这对于提升Java编程技巧,特别是对于理解和处理复杂数据结构以及提高代码灵活性是非常有价值的。同时...
《ArrayList与LinkedList源码解析》 在Java编程中,ArrayList和LinkedList是两种常见的动态数组,它们都是Java集合框架...通过深入学习源码,我们可以看到Java集合框架的精妙设计,提升我们的编程技巧和问题解决能力。
本文将深入探讨Go语言中的双链表实现,以标题"Go-LinkedList一个简单的双链表实现"为例,我们将分析双链表的设计、操作以及其在实际应用中的价值。 双链表是一种线性数据结构,每个节点包含两个指针,分别指向前后...
在Java集合框架中,Vector、ArrayList和LinkedList是三种常见的List接口实现类,它们各自具有不同的特点和适用场景。...通过深入学习和实践,可以提升解决问题的能力,从而在面试和实际工作中表现出色。
本文将深入探讨一个名为"itsmontoya-linkedlist"的开源项目,这是一个基于LinkedList的数据结构实现,具有Map、Filter和Reduce功能的简单内存存储系统。 LinkedList是一种常见的数据结构,它在内存中以链式结构存储...
通过"LinkedListsExamples"项目,开发者可以深入理解`LinkedList`的工作原理,并学习如何根据具体需求定制和优化`LinkedList`的使用。通过实践这些示例,可以提升在实际开发中的数据结构运用能力。
本教程的详细教程rar文件包含更详尽的步骤和示例代码,帮助你深入学习和实践LinkedList的使用。通过学习和实践这些知识,你将能够熟练地在Java程序中操作LinkedList,特别是在需要高效插入和删除元素的场景下。
对于初学者来说,深入学习Java是构建坚实编程基础的关键步骤。本篇将基于提供的"java(入门)深入学习"课程资源,详细介绍Java的核心概念和关键知识点。 首先,Java的学习通常从了解基本语法和数据类型开始。在Java...
链表是一种基础且重要的数据...通过深入学习链表的原理和实现,可以提升编程能力,尤其是在处理动态数据集和复杂算法时。Java中的链表实现提供了方便的工具,使得开发者能够轻松地创建和操作链表,实现各种高级功能。
在IT行业中,数据结构是编程的基础,而LinkedList作为一种重要的线性数据结构,其在JavaScript中的应用广泛且深入。本指南针对资深程序员,将深入探讨LinkedList的高级使用方法和复杂用法。 LinkedList是一种动态...
LinkedList是计算机科学中一种常见的...通过阅读和分析这些文件,你可以深入理解LinkedList的内部工作原理,学习如何在实际编程中有效使用和操作LinkedList。同时,这也可以帮助你提升对C++内存管理和指针操作的理解。
学习这个内容将有助于深入理解C++和数据结构,对于软件开发、算法设计以及系统分析等工作都有很大帮助。通过实践和理解链表的内部机制,程序员可以更有效地解决涉及动态内存分配和数据组织的问题。
本文将深入探讨如何在Kotlin中实现Stack(栈)和LinkedList(链表)这两种常见的数据结构,并通过示例代码展示它们的主要功能。 首先,我们来看Kotlin中的Stack实现。栈是一种后进先出(LIFO)的数据结构,通常用于...
在本实践项目“Praktikum2(Linkedlist)_C++_”中,我们将深入探讨C++编程语言中的链表数据结构。链表是一种非常重要的数据结构,它不同于数组,不连续存储元素,而是通过节点之间的引用关系来组织数据。在C++中,...