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; } }
2
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源码详析" LinkedList是Java中一个非常重要的数据结构,基于双向链表实现,适用于增删频繁且查询不频繁的场景。今天我们将深入分析LinkedList的源码,了解其内部实现机制和特点。 1. ...
《LinkedList源码学习分析》 LinkedList作为Java集合框架中的一员,是基于链表数据结构实现的线程不安全容器。本文将深入探讨LinkedList的实现原理、核心方法的代码实现,并对比ArrayList,理解其特性和使用场景。 ...
这个"jdk1.8 sun源码"压缩包很可能包含了这些未公开的Sun Microsystems的源代码,使得开发者有机会深入研究Java平台的内部工作原理,这对于进行底层优化、理解和调试Java程序有着极大的帮助。然而,值得注意的是,...
2. **集合框架**:`java.util`包中的`ArrayList`、`LinkedList`、`HashMap`、`HashSet`等数据结构的实现,这些是日常编程中最常用的工具。源码可以帮助理解它们的性能特性,比如插入、删除、查找的时间复杂度。 3. ...
源码中,我们可以看到`List`、`Set`、`Map`等接口以及它们的实现类的实现细节,如`ArrayList`和`LinkedList`的区别,`HashMap`和`TreeMap`的内部数据结构以及它们的查找和插入算法。 3. **并发编程**:JDK 1.8引入...
在JDK 1.8中,集合框架已经相当成熟和完善,包括List、Set、Queue、Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。本篇文章将深入探讨这些集合类的源码,揭示其内部实现机制。 首先,我们来看`...
java jdk1.8 源码 Java-source-reading 缓慢更新一些个人学习java相关源码过程中的笔记,在这里你将不可避免地看到以下情况: 个别不懂/没想好的地方留空待补全 ...LinkedList HashMap HashSet LinkedHashMap
4. **集合框架**:Java集合框架包括List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。这些数据结构在实际开发中广泛应用,源码会提供它们的具体实现和使用示例。 5. **输入/输出...
- JDK1.8中对集合框架进行了重大更新,`ArrayList`、`LinkedList`、`HashSet`、`HashMap`等都有对应的源码,可以深入理解它们的工作原理和性能差异。 - **Stream API**:新引入的流API提供了函数式编程的支持,...
|___LinkedList |___Vector |___Set 无序,不可重复 |___HashSet |___TreeSet JDK不提供此接口的任何直接实现:它提供了更具体的子接口(如Set和List)的实现。 (2)Collection的继承体系 关于Ite
对于那些在阅读英文源码时遇到困难的程序员来说,"jdk 1.8 中文对照用 CHM.zip" 提供了一个宝贵的资源。这个压缩包内含一个名为 "jdk api 1.8_google.CHM" 的文件,它是一个基于CHM(Microsoft Compiled HTML Help)...
"1.8"是Java的一个特定版本,这个版本引入了许多新特性,如 Lambda 表达式、Stream API、方法引用等。"java"是Java编程语言的主命名空间,包含许多核心类库。 在【压缩包子文件的文件名称列表】中,我们看到几个...
1.8 源码 jdk1.8.0_151-源码的中文翻译和一些自己的理解 声明 作者现在大四快要毕业,在实习中,为了在未来成为一名架构师,下定决心开始读Java的源代码;读源码的过程非常难熬,我在以前也曾读过源码,但都坚持的...
该项目中,可能包含了这两个数据结构的实现源码,通过阅读和分析源码,可以深入理解ArrayList和LinkedList的工作机制,这对于提升编程技巧和解决问题的能力大有裨益。此外,源码分析也是Java面试中常见的题目,因此...
List相关实现类的源码解析(JDK1.8) 2018.9.22- List的架构图 ArrayList 继承关系: ArrayList -> AbstractList 实现 List接口 ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态...
在JDK 1.8中,`ArrayList`和`LinkedList`作为两种常见的列表实现,各有特点。`ArrayList`基于动态数组实现,适用于随机访问,插入和删除效率相对较低;而`LinkedList`则是双向链表结构,适合于频繁的插入和删除,但...
1. **集合框架**:包括 `ArrayList`, `LinkedList`, `HashMap`, `HashSet` 等数据结构的实现细节,如扩容策略、查找和插入算法等。 2. **并发编程**:`java.util.concurrent` 包中的线程池、并发容器(如 `...
LinkedList ctor-2 addFirst addLast addAll add indexOf lastIndexOf peek 获取第一个元素,是 null 就返回 null peekFirst/Last 获取第一个最后一个元素 poll 删除第一个元素并返回 没有返回 null pollFirst/Last ...
- 存储管理:Java的集合框架(如ArrayList、LinkedList、HashMap等)用于存储和管理歌曲、用户等对象,方便查找和操作。 5. **文件操作**: - 音乐资源:系统可能需要读取和播放音乐文件,这涉及IO流操作,如...
ArrayList是基于动态数组实现的,其底层源码(JDK 1.7和1.8)显示,它通过在需要时增加数组大小来扩展容量。在JDK 1.8中,为了优化插入性能,新增了尾部插入的优化。 Vector与ArrayList类似,也是基于数组实现,但...