`
edgar108
  • 浏览: 33432 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

LinkedList源码(1.8)

    博客分类:
  • java
 
阅读更多

1 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;
        }
    }

 

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

 调用linkLast

  /**
     * Links e as last element.
     */
    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++;
    }

 last一开始为null,first 赋值为 newNode,此时 first的 next和 prev都是null, last指向第一个元素,

第二次add时,第二个元素的prev 为l,即last,自己为last,自己为 上一个元素的next

 

3 size() 直接返回size

 

4 contains

    public boolean contains(Object o) {
        return indexOf(o) != -1;
    }

 

public int indexOf(Object o) {
        int index = 0;
        if (o == null) {
            for (Node<E> x = first; x != null; x = x.next) {
                if (x.item == null)
                    return index;
                index++;
            }
        } else {
            for (Node<E> x = first; x != null; x = x.next) {
                if (o.equals(x.item))
                    return index;
                index++;
            }
        }
        return -1;
    }

  流程和ArrayList类似

5  remove

    public boolean remove(Object o) {
        if (o == null) {
            for (Node<E> x = first; x != null; x = x.next) {
                if (x.item == null) {
                    unlink(x);
                    return true;
                }
            }
        } else {
            for (Node<E> x = first; x != null; x = x.next) {
                if (o.equals(x.item)) {
                    unlink(x);
                    return true;
                }
            }
        }
        return false;
    }

 

  /**
     * Unlinks non-null node x.
     */
    E unlink(Node<E> x) {
        // assert x != null;
        final E element = x.item;
        final Node<E> next = x.next;
        final Node<E> prev = x.prev;

        if (prev == null) {
            first = next;
        } else {
            prev.next = next;
            x.prev = null;
        }

        if (next == null) {
            last = prev;
        } else {
            next.prev = prev;
            x.next = null;
        }

        x.item = null;
        size--;
        modCount++;
        return element;
    }

 

 

分享到:
评论

相关推荐

    Java基于JDK 1.8的LinkedList源码详析

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

    LinkedList源码学习分析

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

    jdk1.8 sun源码

    这个"jdk1.8 sun源码"压缩包很可能包含了这些未公开的Sun Microsystems的源代码,使得开发者有机会深入研究Java平台的内部工作原理,这对于进行底层优化、理解和调试Java程序有着极大的帮助。然而,值得注意的是,...

    jdk1.8 rt.jar 源码

    2. **集合框架**:`java.util`包中的`ArrayList`、`LinkedList`、`HashMap`、`HashSet`等数据结构的实现,这些是日常编程中最常用的工具。源码可以帮助理解它们的性能特性,比如插入、删除、查找的时间复杂度。 3. ...

    javaJDK1.8 源码(.java文件) 新手教程资料

    源码中,我们可以看到`List`、`Set`、`Map`等接口以及它们的实现类的实现细节,如`ArrayList`和`LinkedList`的区别,`HashMap`和`TreeMap`的内部数据结构以及它们的查找和插入算法。 3. **并发编程**:JDK 1.8引入...

    java 集合源码学习,jdk1.8集合类所有的源码讲解

    在JDK 1.8中,集合框架已经相当成熟和完善,包括List、Set、Queue、Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。本篇文章将深入探讨这些集合类的源码,揭示其内部实现机制。 首先,我们来看`...

    javajdk1.8源码-Java-source-reading:jdk1.8源代码分析

    java jdk1.8 源码 Java-source-reading 缓慢更新一些个人学习java相关源码过程中的笔记,在这里你将不可避免地看到以下情况: 个别不懂/没想好的地方留空待补全 ...LinkedList HashMap HashSet LinkedHashMap

    java2全方位学习源码

    4. **集合框架**:Java集合框架包括List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。这些数据结构在实际开发中广泛应用,源码会提供它们的具体实现和使用示例。 5. **输入/输出...

    JDK源码,整合所有内容

    - JDK1.8中对集合框架进行了重大更新,`ArrayList`、`LinkedList`、`HashSet`、`HashMap`等都有对应的源码,可以深入理解它们的工作原理和性能差异。 - **Stream API**:新引入的流API提供了函数式编程的支持,...

    【JDK1.8源码剖析】Collection接口

     |___LinkedList   |___Vector   |___Set 无序,不可重复  |___HashSet  |___TreeSet JDK不提供此接口的任何直接实现:它提供了更具体的子接口(如Set和List)的实现。 (2)Collection的继承体系 关于Ite

    jdk 1.8 中文对照用 CHM.zip

    对于那些在阅读英文源码时遇到困难的程序员来说,"jdk 1.8 中文对照用 CHM.zip" 提供了一个宝贵的资源。这个压缩包内含一个名为 "jdk api 1.8_google.CHM" 的文件,它是一个基于CHM(Microsoft Compiled HTML Help)...

    jdk1.8.0_211源码.zip

    "1.8"是Java的一个特定版本,这个版本引入了许多新特性,如 Lambda 表达式、Stream API、方法引用等。"java"是Java编程语言的主命名空间,包含许多核心类库。 在【压缩包子文件的文件名称列表】中,我们看到几个...

    java1.8源码-jdk1.8.0_151-:阅读Java源码,版本为jdk1.8.0_151,将会同步翻译源码中的文档注释

    1.8 源码 jdk1.8.0_151-源码的中文翻译和一些自己的理解 声明 作者现在大四快要毕业,在实习中,为了在未来成为一名架构师,下定决心开始读Java的源代码;读源码的过程非常难熬,我在以前也曾读过源码,但都坚持的...

    java毕业设计之ArrayList,LinkList链表接口实现源码.zip

    该项目中,可能包含了这两个数据结构的实现源码,通过阅读和分析源码,可以深入理解ArrayList和LinkedList的工作机制,这对于提升编程技巧和解决问题的能力大有裨益。此外,源码分析也是Java面试中常见的题目,因此...

    java8源码-csn-list:ArrayList、LinkedList、Vector、Stack源码分析

    List相关实现类的源码解析(JDK1.8) 2018.9.22- List的架构图 ArrayList 继承关系: ArrayList -&gt; AbstractList 实现 List接口 ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态...

    java类源码-JavaCollection:基于JDK1.8的集合类源码分析

    在JDK 1.8中,`ArrayList`和`LinkedList`作为两种常见的列表实现,各有特点。`ArrayList`基于动态数组实现,适用于随机访问,插入和删除效率相对较低;而`LinkedList`则是双向链表结构,适合于频繁的插入和删除,但...

    javasrc源码-java-source:jdk1.8.0_src

    1. **集合框架**:包括 `ArrayList`, `LinkedList`, `HashMap`, `HashSet` 等数据结构的实现细节,如扩容策略、查找和插入算法等。 2. **并发编程**:`java.util.concurrent` 包中的线程池、并发容器(如 `...

    java8源码-JDKSourceCode:阅读jdk1.8的一些注意事项

    LinkedList ctor-2 addFirst addLast addAll add indexOf lastIndexOf peek 获取第一个元素,是 null 就返回 null peekFirst/Last 获取第一个最后一个元素 poll 删除第一个元素并返回 没有返回 null pollFirst/Last ...

    Java课程设计:ktv点歌系统源码.zip

    - 存储管理:Java的集合框架(如ArrayList、LinkedList、HashMap等)用于存储和管理歌曲、用户等对象,方便查找和操作。 5. **文件操作**: - 音乐资源:系统可能需要读取和播放音乐文件,这涉及IO流操作,如...

    对java基础集合部分(List、HashMap、HashSet、ArrayList等)底层源码的分析与总结

    ArrayList是基于动态数组实现的,其底层源码(JDK 1.7和1.8)显示,它通过在需要时增加数组大小来扩展容量。在JDK 1.8中,为了优化插入性能,新增了尾部插入的优化。 Vector与ArrayList类似,也是基于数组实现,但...

Global site tag (gtag.js) - Google Analytics