LinkedList<E>
- 此对象使用双向循环链表的方式进行。定义内部对象LinkedList.Entry<E>,用于存储链表中的每个节点,每个节点结构包括前一节点指针、后一节点指针、当前节点值。
private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;
Entry(E element, Entry<E> next, Entry<E> previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
}
- 此对象存储记录双向链表的头指针和当前链表长度。读取长度时,不会循环链表
private transient Entry<E> header = new Entry<E>(null, null, null);
private transient int size = 0;
- 执行增加节点时,如果不指定位置,插入节点为链表的最后一个节点。由于是双向循环链表,所以直接插入到header节点之前。
public boolean add(E e) {
addBefore(e, header);
return true;
}
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;
}
- 执行移除节点操作时,会顺序遍历每个节点,判断是否满足移除条件。使用引用移除时,从header往后查找,移除第一个匹配到的元素(如果有两个同一引用的节点,则后一个依然存在)。使用索引位置进行移除(或查找get操作)时,根据索引大小是否大于总数的1/2(移位运算),确定是从前往后索引,还是从后往前索引,即所以数量最多不超多链表元素的一半。
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;
}
public E remove(int index) {
return remove(entry(index));
}
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)) {
for (int i = 0; i <= index; i++)
e = e.next;
} else {
for (int i = size; i > index; i--)
e = e.previous;
}
return e;
}
- indexOf操作同ArrayList,进行顺序的比较查找。
public int indexOf(Object o) {
int index = 0;
if (o == null) {
for (Entry e = header.next; e != header; e = e.next) {
if (e.element == null)
return index;
index++;
}
} else {
for (Entry e = header.next; e != header; e = e.next) {
if (o.equals(e.element))
return index;
index++;
}
}
return -1;
}
分享到:
相关推荐
<br>第1章 Java基础 <br>1.1 转换基本数据类型 <br>1.2 Java的运算符 <br>1.3 控制程序的流程 <br>1.4 计算阶乘 <br>1.5 实现命令行程序 <br>第2章 Java面向对象程序设计 <br>2. 1 复数类 <br>2. 2 equals.chashCode...
- **集合框架**: 研究ArrayList、LinkedList、HashMap、HashSet等数据结构的实现。 - **I/O流**: 理解字节流、字符流、缓冲流、对象序列化等概念。 - **网络编程**: 学习Socket通信,HTTP、FTP协议的实现。 - **国际...
2. **集合框架**:`java.util`包中的`ArrayList`、`LinkedList`、`HashMap`、`HashSet`等数据结构的实现,这些是日常编程中最常用的工具。源码可以帮助理解它们的性能特性,比如插入、删除、查找的时间复杂度。 3. ...
深入理解JDK 1.6的源码对于Java开发者来说至关重要,因为它揭示了语言核心库的工作原理,有助于优化代码、理解和解决潜在问题。 1. **Java虚拟机(JVM)**:JDK 1.6中的JVM是Java程序执行的基础,它的主要职责是...
6. **集合框架**:`java.util`包中的集合类,如ArrayList、HashMap、LinkedList等,其内部实现细节对于理解数据结构和算法有很大帮助。 7. **I/O流**:`java.io`和`java.nio`包提供了丰富的输入/输出流接口和类,...
6. **输入输出流**:Java的I/O流系统是处理数据传输的关键,源码会涵盖文件读写、网络通信、序列化等场景,让你了解InputStream、OutputStream、Reader、Writer等类的使用。 7. **反射机制**:反射是Java的高级特性...
这些类的源码展示了如何实现数据结构和算法,对于提升算法和数据结构理解有很大帮助。 10. **异常处理** `java.lang.Throwable`及其子类定义了Java的异常处理机制。通过查看源码,我们可以了解到异常的抛出、捕获...
在源码中,你可以看到`java.lang`、`java.util`、`java.io`等包中的各种基础类是如何实现的,例如`String`、`ArrayList`、`HashMap`等常用数据结构。 首先,`java.lang`包包含了Java语言的基础类和接口,如`Object`...
通过阅读和分析JDK 1.7的源码,我们可以深入了解这些类和接口的实现细节,这对于优化代码性能、排查问题以及设计自己的数据结构和算法都有很大帮助。同时,这也是学习Java语言和提升编程能力的重要途径。
Java JDK实例宝典是一本深度探讨Java开发工具集(Java Development Kit)的实践性书籍,其光盘源码为读者提供了丰富的示例代码,便于学习和理解。这本书旨在帮助Java开发者深入掌握JDK中的核心概念和技术,提升编程...
9. **标准库扩展**:"javax"包包含了JDK标准扩展,如Swing GUI库、XML处理等。 10. **源码注释**:源码中的注释提供了功能解释、设计决策和使用示例,有助于学习和调试。 通过深入研究JDK 1.6.0_05的源码,开发者...
- 集合框架:深入理解`java.util`包中的ArrayList、HashMap、LinkedList等数据结构的实现。 - 多线程:查看`java.lang.Thread`和`java.util.concurrent`包,理解并发和多线程编程。 - 输入/输出:研究`java.io`包,...
"01.3 JDK"可能涉及Java开发工具包(JDK)的基础知识,包括标准库API的使用和Java开发环境的设置。 这些主题覆盖了数据结构和算法的基础,是学习和实践Java编程所必需的。通过阅读和理解叶核亚的书中的源代码,你...
2. 集合框架(Collections Framework):如ArrayList、LinkedList、HashMap等数据结构的实现,以及它们的性能特点。 3. 多线程(Thread):深入研究线程的创建、同步、唤醒、阻塞等操作的底层实现。 4. 异常处理...
4. **集合框架**:Java集合框架包括ArrayList、LinkedList、HashMap、HashSet等数据结构,它们在实际开发中应用广泛。源码实例会展示如何使用这些集合,以及它们在不同场景下的性能差异。 5. **IO流**:Java的IO流...
Java JDK宝典源代码是Java开发者的宝贵资源,它提供了Java开发工具包(JDK)的核心类库和实现的原始源代码。对于深入理解Java语言、API的工作原理以及进行问题排查,阅读源代码是非常有益的。这篇博文中,博主分享了...
《Java JDK实例宝典》是由夏先波编著的一本针对Java初学者和进阶者的重要参考资料,书中包含了丰富的Java编程实例,旨在帮助读者深入理解Java JDK(Java Development Kit)的各项功能和用法。这本书的源代码是学习...
`java.util`包是Java标准库的核心部分,包含了大量的工具类和集合框架,是日常开发中频繁使用的组件。`java.util_source_learning`项目提供了对JDK源码的学习资源,帮助开发者深入探索这个包内的实现细节。 在JDK...
《疯狂Java讲义第二版》是由知名Java教育专家李刚编写的一本深入浅出的Java编程教程,其源码提供给读者,旨在帮助学习者更好地理解书中所讲解的编程概念和实战技巧。这本书覆盖了大量的Java核心知识,包括基础语法、...
它详尽地列出了Java平台标准版(Java SE)的所有类、接口、方法和异常,帮助开发者理解如何使用Java语言及其库。在本文中,我们将深入探讨JDK Doc的下载地址、其重要性以及如何利用它进行高效开发。 首先,JDK Doc...