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的添加删除操作 java LinkedList的添加删除操作
Java 中Linkedlist类的源代码Java 中Linkedlist类的源代码Java 中Linkedlist类的源代码Java 中Linkedlist类的源代码
Java LinkedList教程
实现一个链表LinkedList,要求使用链表机构实现,并提供相应的add(Object o),remove(Object o)这两个方法.
实现一个链表称为循环链表的变化。链表应该能够被用来保留任何对象类型的数据。在一个循环链表的最后一个节点 相连字段不为空,而是指回第一个节点。你的执行应当至少包括以下操作: 1.... 2.... 3.... 4....
相信大家都明白 LinkedList 是基于双向链表而实现的,本篇文章主要讲解一下双向链表的实现,并且我们参考 LinkedList 自己实现一个单链表尝试一下。 什么是链表? 简单的来讲一下什么是链表:首先链表是一种线性的...
主要介绍了java LinkedList的实例详解的相关资料,通过本文希望大家能彻底了解掌握这部分内容,需要的朋友可以参考下
栈是先进先出的原则,该类实现了栈的移入移除
about single linked list, using java programming language. modify some error.
使用LinkedList模拟堆栈操作,包括进栈、出栈,入队、出队
JAVA LinkedList和ArrayList的使用及性能分析,这篇文章也是以JAVA List的总结。
主要介绍了Java LinkedList集合功能实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了java LinkedList类详解及实例代码的相关资料,需要的朋友可以参考下
主要介绍了java LinkedList源码详解及实例的相关资料,需要的朋友可以参考下
主要介绍了Java Linkedlist原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
今天小编就为大家分享一篇关于Java LinkedList的实现原理图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
深入解析hashMap底层原理,非常深入的讲解了HashMap和相关的数据的等信息
java链表 编写一个程序,演示您了解如何使用Java LinkedList类。