`
alph0618
  • 浏览: 54738 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

LinkedList源码解读

    博客分类:
  • java
 
阅读更多

LinkedList 存放数据通过双向链表实现:

写道
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;

Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}

 调用add方法增加数据时,是把当前数据放到链表的最末端,及后进后出:

 public boolean add(E e) {
        linkLast(e);
        return true;
    }

void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;//新元素放到末端
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

 可以看到LinkedList是直接把新元素插入到指定位置的,而ArrayList插入新元素时可能还要扩容以及数据复制带来的开销。

 

取数据时:

public E get(int index) {
        checkElementIndex(index);
        return node(index).item;
    }


Node<E> node(int index) {
        // assert isElementIndex(index);

        if (index < (size >> 1)) {//确认在上半区还是在下半区
            Node<E> x = first;
            for (int i = 0; i < index; i++)
                x = x.next;
            return x;
        } else {
            Node<E> x = last;
            for (int i = size - 1; i > index; i--)
                x = x.prev;
            return x;
        }
    }

 

所以LinkedList取数据是比ArrayList慢的。

分享到:
评论

相关推荐

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

    阅读建议:结合代码进行阅读,在阅读的时候进行代码的比对,以及做笔记,结合自己不懂的地方反复观看,源码解读较为枯燥,文档中的步骤给的都很详细,需要大家结合源码一步一步的跟着步骤进行阅读,

    java LinkedList源码详解及实例

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

    java源码解读-JavaSource:Java源码解读

    在Java编程语言的世界里,源码解读是提升技术深度、理解内部机制的关键步骤。"JavaSource:Java源码解读"项目旨在帮助开发者深入探索Java的内部工作原理,从而更好地运用和优化代码。在这个项目中,我们可以看到一...

    java面试题_源码解读(3题)

    在Java面试中,源码解读是一项重要的能力,它考察了开发者对Java语言底层实现的理解以及问题解决的能力。这里我们将深入探讨三道常见的Java面试题,它们涵盖了基础、并发和集合框架等方面,帮助你提升对Java源码的...

    java源码解读-JavaAPI:jdk源码解读分析

    本篇文章将对Java API的部分关键组件进行源码解读,帮助读者深入理解其工作原理。 1. **对象创建与内存管理**: - `Object`类:所有Java类的基类,包含了如`clone()`, `equals()`, `hashCode()`等方法。理解`...

    Java相关技术总结,包括redis,MySQL,RabbitMq,面试题总结,源码解读

    源码解读是提升技术水平的重要途径。例如,深入理解HashMap和ConcurrentHashMap的实现,可以让我们更好地利用这些数据结构,避免性能瓶颈;阅读ArrayList和LinkedList的源码,有助于我们选择合适的数据结构以优化...

    Java底层知识点、源码解读,技术栈相关原理知识点、工具解读最佳实践、功能点实战,问题排查,开发技巧等

    Java作为一门广泛使用的编程语言,其底层知识点和源码解读对于深入理解并优化代码性能至关重要。本主题将探讨以下几个方面: 1. **Java虚拟机(JVM)**: JVM是Java程序运行的基础,它负责字节码的解释执行,内存...

    java源码解读-ITG-JavaBook01:Java面试高频源码解读

    《Java源码解读-ITG-JavaBook01: Java面试高频源码解读》是一部针对Java程序员面试准备的深入学习资料。在这个项目中,我们将会探索Java语言的一些核心概念和常用库的源代码,帮助开发者更好地理解Java的内部机制,...

    清华妹子的Java仓库(进阶学习路线)

    Java集合框架源码解读(1)——ArrayList、LinkedList和Vector Java集合框架源码解读(2)——HashMap Java集合框架源码解读(3)——LinkedHashMap Java集合框架源码解读(4)——WeakHashMap Java集合框架源码解读

    ArrayList源码分析

    本篇文章将深入探讨ArrayList的源码,了解其内部实现机制,以及在实际编程中如何有效地使用ArrayList。 1. **ArrayList的构造函数** ArrayList提供了多个构造函数,包括无参构造、指定容量构造和初始化容量并赋值...

    java源码解读-jdk_reading:java源码日常阅读与注解

    《Java源码解读——深入理解JDK》 Java作为一门广泛应用的编程语言,其源码是许多开发者探索技术原理、提升编程技能的重要资源。"java源码解读-jdk_reading:java源码日常阅读与注解"项目,旨在帮助开发者深入理解...

    Android+上百实例源码分析以及开源分析+集合打包3

    源码解读可以帮助我们了解系统内部的工作机制,理解API的设计思路,甚至启发我们去优化现有代码或者开发新的功能。例如,对Android系统的四大组件(Activity、Service、BroadcastReceiver、ContentProvider)的源码...

    JDK源码选读

    源码解读有助于理解TCP和UDP连接的建立、数据传输过程。 7. **反射API**:`java.lang.reflect`包包含用于运行时动态访问和修改类的API。通过源码学习,我们可以掌握如何通过反射创建对象、调用方法、访问字段,以及...

    javaforkjoin源码-gitbook-BAT-interview:本文综合自己在一线互联网工作感悟,经验。记录开源框架的源码解读,数据

    java forkjoin 源码 -- -- geomesa -- spring -- 算法 ...[乐观锁&悲观锁,重入锁&非重入锁,公平锁&非公平锁,锁粒度] ...ReadWriteLock源码] ...ConcurrentHashMap源码] ...LinkedList, CopyOnWriteArrayList源码]

    图书馆管理系统(Java) 优秀毕业设计 +源码.rar

    五、源码解读 源码分析可以帮助我们深入理解系统的设计和实现。从文件名来看,“优秀毕业设计论文”可能包含系统设计文档和系统分析报告,而“源码”部分则包含具体程序代码。通过阅读源码,可以学习到如何将上述...

    集合类底层源码解析汇总

    java所有集合类底层源码解析汇总,包括ArrayList、HashMap、HashSet、LinkedList、TreeMap、HashSet、ConcurrentHashMap等集合框架的底层实现源码大白话解读。

    系统解析JDK源码,领略大牛设计思想,JAVA进阶必备(2023新课,已完结)

    8. **多线程同步**:synchronized关键字、Lock接口及其实现如ReentrantLock,以及并发工具类如Atomic系列,源码解读能揭示其内部同步机制,提升多线程编程能力。 9. **字符串处理**:String类的不可变性、...

    android贪吃蛇游戏源码

    以下是对"android贪吃蛇游戏源码"的详细解读: 1. **用户界面(UI)设计**: - 使用Android Studio中的布局工具(如XML布局)创建游戏主界面,包含游戏区域、得分显示、开始/暂停按钮等元素。 - 游戏区域通常用一...

    Information by people_java编程_enjoyz2u_people_源码.zip

    理解类的定义、构造函数、方法、继承层次和多态性对解读源码至关重要。 3. **异常处理**:Java提供了异常处理机制,通过try-catch-finally语句块来捕获和处理运行时错误。源码中可能会有异常的处理逻辑。 4. **...

    Java.Web整合开发王者归来 源码

    以下是对该书内容的详细解读: 1. **Java基础**:Java作为Web开发的基石,基础部分会涉及Java语言的语法、面向对象编程概念、异常处理、集合框架(如ArrayList、LinkedList、HashMap等)以及IO流和多线程。这些是...

Global site tag (gtag.js) - Google Analytics