`
wenjinglian
  • 浏览: 821808 次
  • 性别: Icon_minigender_1
  • 来自: 株洲->深圳
社区版块
存档分类
最新评论

了解LinkedList原理

阅读更多

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 应用在新增和删除操作比较频繁场景

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    源码解析jdk7.0集合:LinkedList的底层实现原理.pdf

    在深入分析JDK 7.0中LinkedList集合的底层实现原理前,我们首先需要了解LinkedList的基本概念。LinkedList,即双向链表,是一种通过双向指针相互连接的数据结构,每个节点包含数据域以及指向前驱和后继节点的指针。...

    创建一个 LinkedList项目.docx

    了解了 LinkedList 的工作原理和使用方法后,可以根据实际需求选择适合的数据结构。在需要高效插入、删除且不需要快速随机访问元素的场景下,LinkedList 是一个理想的选择。然而,如果需要快速访问或遍历元素,数组...

    Java中LinkedList原理代码解析

    在Java编程语言中,LinkedList是一种实现List接口的数据结构,它以双向链表的形式存储元素。本文将深入探讨LinkedList的工作原理,以及如何...了解这些原理可以帮助开发者更好地利用LinkedList,提高代码的性能和效率。

    Java中集合LinkedList的原理与使用方法

    本文将深入探讨LinkedList的原理和使用方法。 首先,LinkedList是一个双向链表,意味着每个元素(节点)都有指向前后元素的引用。这与ArrayList不同,ArrayList是基于数组实现的,对元素的添加和删除操作在数组末尾...

    Java LinkedList的实现原理图文详解

    Java LinkedList 的实现原理图文详解 Java LinkedList 是一个通过双向链表实现的 List 和 Deque 接口,它允许插入所有元素,包括 null,...通过了解 LinkedList 的实现原理,我们可以更好地理解和使用 LinkedList。

    LinkedList代码.rar

    通过分析源码,你可以更好地了解其在不同场景下的性能表现,以及如何优化LinkedList的使用以提高程序效率。 总之,LinkedList是一种重要的数据结构,理解其工作原理和特性对于提升Java编程能力至关重要。通过学习和...

    LinkedList源码学习分析

    《LinkedList源码学习分析》 LinkedList作为Java集合框架中的一员,是基于链表数据结构实现的线程不安全容器。...同时,了解并理解数据结构的实现原理,能帮助我们更好地利用它们,优化代码性能。

    Map+List+ArrayList+LinkedList Java源码

    了解它们的源码对于深入理解Java集合框架的内部工作原理至关重要,尤其是对初学者而言,这有助于提高编程技能和优化代码性能。 **Map接口** Map是Java集合框架中的一个接口,它定义了键值对存储的方法。Map接口不...

    LinkedList实现List一些方法

    在本文中,我们将深入探讨LinkedList如何实现List接口的一些主要方法,并了解其内部工作原理。 1. **添加元素**: LinkedList提供了`add(int index, E element)`和`add(E e)`方法来添加元素。`add(int index, E ...

    Java系列LinkedList

    **Java系列LinkedList** 链表是一种基础数据结构,它在计算机科学中扮演着重要角色,特别是在Java编程中。链表不按照线性顺序存储数据,而是每个...了解`LinkedList`的工作原理和用法对于优化Java程序性能至关重要。

    ArrayList Vector LinkedList 区别与用法.

    了解ArrayList、Vector和LinkedList的不同特性,可以帮助我们在实际开发中根据具体需求选择最适合的数据结构,从而优化程序性能。虽然JDK提供了丰富的集合框架,但掌握这些核心类的工作原理和适用场景,对于写出高效...

    对比Vector、ArrayList、LinkedList1

    了解内部排序(如冒泡排序、快速排序、选择排序和插入排序)和外部排序的基本原理,以及它们在不同数据集上的性能表现,是面试中常见的问题。面试官可能会询问算法的稳定性、最坏和最好情况下的时间复杂度,以及如何...

    深入arraylist,linkedlist,hashmap,hashset源码(2012/3/18)

    其源码中的关键方法如`add()`、`get()`、`remove()`和`ensureCapacity()`都值得深入研究,了解它们的时间复杂度和扩容机制对于优化代码性能至关重要。 LinkedList是一种双向链表,它的每个节点包含一个元素和两个...

    Java中的ArrayList的底层源码解读、LinkedList、Vector的区别介绍

    适用人群:JavaSE初学者,对源码感兴趣的,想要深度了解ArrayList底层实现、数据结构、add方法、Remove方法、以及自动扩容机制的同学,并且对ArrayList已经有过使用,想要学习它与LinkedList,Vector等的区别,该...

    Kotlin中Stack与LinkedList的实现方法示例

    在Kotlin编程语言中,数据结构的实现是构建高效算法和程序的基础。本文将深入探讨如何在Kotlin中实现Stack(栈)和LinkedList(链表)...在学习和实践中,了解和掌握这些数据结构的实现原理对于提升编程技能至关重要。

    java 中ArrayList与LinkedList性能比较

    首先,让我们来了解ArrayList和LinkedList的实现原理。ArrayList是基于数组结构实现的,而LinkedList是基于链表结构实现的。数组结构的优点是可以快速地通过索引访问元素,而链表结构的优点是可以快速地插入和删除...

    main_linkedlist_app.zip_main2com linked 114

    链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态数据集合时。在给定的“main_...通过对“main_linkedlist_app.c”的分析,我们可以更具体地了解如何在实际应用中使用链表。

    第8天(集合【LinkedList、HashSet、Collection集合体系】)v201703103

    【Java集合框架】\n\n在Java编程语言中,集合框架是用于存储和操作对象的容器,它提供了灵活且高效的方式来处理数据。...了解和熟练掌握这些集合的特点和操作方法,能帮助开发者更高效地处理各种数据存储和操作需求。

    linkedList.rar

    在本压缩包“linkedList.rar”中,包含了作者自己编写的单链表、双链表以及循环链表的实现,还附带了测试代码,确保了功能的正确性,对于学习链表的操作和理解提供了很好的实践材料。 首先,我们来深入了解一下...

    盐城工学院计算机组成原理课程设计(三)

    了解它们的功能及其相互作用是计算机组成原理的基础。 2. 数据表示:包括二进制、八进制、十进制和十六进制的转换,以及位运算,如与、或、非、异或等,这些都是计算机处理数据的基本方式。 3. 寻址与存储:了解...

Global site tag (gtag.js) - Google Analytics