List接口有两个实现,一个是ArrayList,另一个是LinkedList。从字面上就可以看出Array表示 的是数组,Link表示的是链表,区别一目了然,今天看看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;
}
}
典型的链表节点结构啊!
ArrayList中可以通过iterator来获取迭代器,很可惜的告诉你,LinkedList中没有。它的基础就是listIterator。
public ListIterator<E> listIterator(int index) {
checkPositionIndex(index);
return new ListItr(index);
}
果不其然,又是一个内部类了。
private class ListItr implements ListIterator<E> {
private Node<E> lastReturned = null;
private Node<E> next;
private int nextIndex;
private int expectedModCount = modCount;
ListItr(int index) {
// assert isPositionIndex(index);
next = (index == size) ? null : node(index);
nextIndex = index;
}
public boolean hasNext() {
return nextIndex < size;
}
public E next() {
checkForComodification();
if (!hasNext())
throw new NoSuchElementException();
lastReturned = next;
next = next.next;
nextIndex++;
return lastReturned.item;
}
public boolean hasPrevious() {
return nextIndex > 0;
}
public E previous() {
checkForComodification();
if (!hasPrevious())
throw new NoSuchElementException();
lastReturned = next = (next == null) ? last : next.prev;
nextIndex--;
return lastReturned.item;
}
public int nextIndex() {
return nextIndex;
}
public int previousIndex() {
return nextIndex - 1;
}
public void remove() {
checkForComodification();
if (lastReturned == null)
throw new IllegalStateException();
Node<E> lastNext = lastReturned.next;
unlink(lastReturned);
if (next == lastReturned)
next = lastNext;
else
nextIndex--;
lastReturned = null;
expectedModCount++;
}
public void set(E e) {
if (lastReturned == null)
throw new IllegalStateException();
checkForComodification();
lastReturned.item = e;
}
public void add(E e) {
checkForComodification();
lastReturned = null;
if (next == null)
linkLast(e);
else
linkBefore(e, next);
nextIndex++;
expectedModCount++;
}
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
}
代码其实也很简单,就是指针呗。
分享到:
相关推荐
非常简单的Java LinkedList 应用实例
在Java编程语言中,LinkedList是一种线性数据结构,属于集合框架的一部分,实现了List接口和Deque接口。LinkedList以链表的形式存储元素,这使得它在添加和删除元素时具有较高的效率,尤其是在列表的中间或开头进行...
本文将详细讲解如何使用Java中的LinkedList类来模拟这两种数据结构,并实现其基本操作。 堆栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构,它遵循“先进后出”的原则。常见的堆栈操作有压栈...
Java LinkedList 教程 Java LinkedList 是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。链表可分为单向链表和双向链表。一个单向链表包含两个...
"java LinkedList实例详解" Java LinkedList是一种基于链表的数据结构,在Java语言中广泛应用于实现队列、栈、双端队列等数据结构。下面将对Java LinkedList的实例进行详细的解释。 1. LinkedList类结构 Java ...
实现一个链表LinkedList,要求使用链表机构实现,并提供相应的add(Object o),remove(Object o)这两个方法.
Java LinkedList集合功能实例解析 Java LinkedList集合是Java集合框架中的一种重要实现,基于链表数据结构,提供了许多有用的方法来操作集合元素。下面对Java LinkedList集合的功能进行详细介绍。 LinkedList集合...
实现一个链表称为循环链表的变化。链表应该能够被用来保留任何对象类型的数据。在一个循环链表的最后一个节点 相连字段不为空,而是指回第一个节点。你的执行应当至少包括以下操作: 1.... 2.... 3.... 4....
在Java编程语言中,LinkedList是一个实现List接口的类,它以双向链表的形式存储元素。这个数据结构允许我们在列表的任何位置进行插入和删除操作,具有O(1)的时间复杂度,这使得LinkedList在需要频繁进行这些操作时比...
相信大家都明白 LinkedList 是基于双向链表而实现的,本篇文章主要讲解一下双向链表的实现,并且我们参考 LinkedList 自己实现一个单链表尝试一下。 什么是链表? 简单的来讲一下什么是链表:首先链表是一种线性的...
Java中的LinkedList是一个实现双向链表的数据结构,它继承自AbstractList接口,并实现了List、Deque以及Cloneable和Serializable接口。LinkedList通常用于需要频繁插入和删除元素的场景,因为这些操作在链表中的时间...
Java LinkedList原理及实例详解 Java LinkedList是Java集合框架中的一种数据结构,属于链表结构,方便添加和删除元素,但查询不方便,适用于对收尾的操作。下面将详细介绍Java LinkedList的原理及实例详解。 ...
栈是先进先出的原则,该类实现了栈的移入移除
Java LinkedList 的实现原理图文详解 Java LinkedList 是一个通过双向链表实现的 List 和 Deque 接口,它允许插入所有元素,包括 null,并且它是线程不同步的。如果对双向链表这个数据结构很熟悉的话,学习 ...
Java中的LinkedList类是Java集合框架的一部分,属于List接口的实现,它提供了线性数据结构的能力,同时保持了链表的特点。LinkedList不同于ArrayList,后者在内存中是连续存储的,而LinkedList则是通过节点对象链接...
Java LinkedList类是Java集合框架的一部分,它位于`java.util`包中,主要用于创建和操作链表数据结构。链表是一种动态数据结构,其中元素不是在内存中连续存储的,而是通过节点之间的引用链接起来。LinkedList类实现...
首先,LinkedList类位于Java的`java.util`包中,它实现了List接口,允许我们存储和操作一系列元素。LinkedList内部维护了一个双向链表,每个元素都是一个Node对象,包含元素值以及指向前后节点的引用。由于...
**Java系列LinkedList** 链表是一种基础数据结构,它在计算机科学中扮演着重要角色,特别是在Java编程中。链表不按照线性顺序存储数据,而是每个节点存储数据以及指向下一个节点的引用。Java中的`LinkedList`类是...
深入解析hashMap底层原理,非常深入的讲解了HashMap和相关的数据的等信息