1.LinkedList介绍
线性链表集合,循环链表http://blog.csdn.net/tiwerbao/article/details/8227689
非线程安全
底层实现:底层使用 Entry<E>实现 entry 有有三个元素 :
E element 当前元素
Entry<E> next 下个一元素
Entry<E> previous 上一个元素
不需要考虑集合大小与扩展
2.与其他集合对比
参见:http://nassir.iteye.com/blog/1990523
3.源码分析
public LinkedList() { header.next = header.previous = header; // 先初始化一个空的Entry,用来做header,然后首尾相连,形成一个循环链表 } public boolean remove(Object o) { if (o==null) { //分为空和非空删除 for (Entry<E> e = header.next; e != header; e = e.next) { if (e.element==null) { remove(e); return true; } } } else { for (Entry<E> e = header.next; e != header; e = e.next) { if (o.equals(e.element)) { remove(e); return true; } } } return false; } //查找 private Entry<E> entry(int index) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException("Index: "+index+ ", Size: "+size); Entry<E> e = header; if (index < (size >> 1)) {//size >> 1 相当于 size/2 通过index确定是向前还是向后查找 for (int i = 0; i <= index; i++) e = e.next; } else { for (int i = size; i > index; i--) e = e.previous; } return e; } final void checkForComodification() { //检测是否在并发 if (modCount != expectedModCount) throw new ConcurrentModificationException(); } 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; }
4.优化
LinkedList 应用在新增和删除操作比较频繁场景
相关推荐
在深入分析JDK 7.0中LinkedList集合的底层实现原理前,我们首先需要了解LinkedList的基本概念。LinkedList,即双向链表,是一种通过双向指针相互连接的数据结构,每个节点包含数据域以及指向前驱和后继节点的指针。...
了解了 LinkedList 的工作原理和使用方法后,可以根据实际需求选择适合的数据结构。在需要高效插入、删除且不需要快速随机访问元素的场景下,LinkedList 是一个理想的选择。然而,如果需要快速访问或遍历元素,数组...
在Java编程语言中,LinkedList是一种实现List接口的数据结构,它以双向链表的形式存储元素。本文将深入探讨LinkedList的工作原理,以及如何...了解这些原理可以帮助开发者更好地利用LinkedList,提高代码的性能和效率。
本文将深入探讨LinkedList的原理和使用方法。 首先,LinkedList是一个双向链表,意味着每个元素(节点)都有指向前后元素的引用。这与ArrayList不同,ArrayList是基于数组实现的,对元素的添加和删除操作在数组末尾...
Java LinkedList 的实现原理图文详解 Java LinkedList 是一个通过双向链表实现的 List 和 Deque 接口,它允许插入所有元素,包括 null,...通过了解 LinkedList 的实现原理,我们可以更好地理解和使用 LinkedList。
通过分析源码,你可以更好地了解其在不同场景下的性能表现,以及如何优化LinkedList的使用以提高程序效率。 总之,LinkedList是一种重要的数据结构,理解其工作原理和特性对于提升Java编程能力至关重要。通过学习和...
《LinkedList源码学习分析》 LinkedList作为Java集合框架中的一员,是基于链表数据结构实现的线程不安全容器。...同时,了解并理解数据结构的实现原理,能帮助我们更好地利用它们,优化代码性能。
了解它们的源码对于深入理解Java集合框架的内部工作原理至关重要,尤其是对初学者而言,这有助于提高编程技能和优化代码性能。 **Map接口** Map是Java集合框架中的一个接口,它定义了键值对存储的方法。Map接口不...
在本文中,我们将深入探讨LinkedList如何实现List接口的一些主要方法,并了解其内部工作原理。 1. **添加元素**: LinkedList提供了`add(int index, E element)`和`add(E e)`方法来添加元素。`add(int index, E ...
**Java系列LinkedList** 链表是一种基础数据结构,它在计算机科学中扮演着重要角色,特别是在Java编程中。链表不按照线性顺序存储数据,而是每个...了解`LinkedList`的工作原理和用法对于优化Java程序性能至关重要。
了解ArrayList、Vector和LinkedList的不同特性,可以帮助我们在实际开发中根据具体需求选择最适合的数据结构,从而优化程序性能。虽然JDK提供了丰富的集合框架,但掌握这些核心类的工作原理和适用场景,对于写出高效...
了解内部排序(如冒泡排序、快速排序、选择排序和插入排序)和外部排序的基本原理,以及它们在不同数据集上的性能表现,是面试中常见的问题。面试官可能会询问算法的稳定性、最坏和最好情况下的时间复杂度,以及如何...
其源码中的关键方法如`add()`、`get()`、`remove()`和`ensureCapacity()`都值得深入研究,了解它们的时间复杂度和扩容机制对于优化代码性能至关重要。 LinkedList是一种双向链表,它的每个节点包含一个元素和两个...
适用人群:JavaSE初学者,对源码感兴趣的,想要深度了解ArrayList底层实现、数据结构、add方法、Remove方法、以及自动扩容机制的同学,并且对ArrayList已经有过使用,想要学习它与LinkedList,Vector等的区别,该...
在Kotlin编程语言中,数据结构的实现是构建高效算法和程序的基础。本文将深入探讨如何在Kotlin中实现Stack(栈)和LinkedList(链表)...在学习和实践中,了解和掌握这些数据结构的实现原理对于提升编程技能至关重要。
首先,让我们来了解ArrayList和LinkedList的实现原理。ArrayList是基于数组结构实现的,而LinkedList是基于链表结构实现的。数组结构的优点是可以快速地通过索引访问元素,而链表结构的优点是可以快速地插入和删除...
链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态数据集合时。在给定的“main_...通过对“main_linkedlist_app.c”的分析,我们可以更具体地了解如何在实际应用中使用链表。
【Java集合框架】\n\n在Java编程语言中,集合框架是用于存储和操作对象的容器,它提供了灵活且高效的方式来处理数据。...了解和熟练掌握这些集合的特点和操作方法,能帮助开发者更高效地处理各种数据存储和操作需求。
在本压缩包“linkedList.rar”中,包含了作者自己编写的单链表、双链表以及循环链表的实现,还附带了测试代码,确保了功能的正确性,对于学习链表的操作和理解提供了很好的实践材料。 首先,我们来深入了解一下...
了解它们的功能及其相互作用是计算机组成原理的基础。 2. 数据表示:包括二进制、八进制、十进制和十六进制的转换,以及位运算,如与、或、非、异或等,这些都是计算机处理数据的基本方式。 3. 寻址与存储:了解...