`

Java LinkedList

阅读更多
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 Source Code

    非常简单的Java LinkedList 应用实例

    java LinkedList的添加删除操作

    在Java编程语言中,LinkedList是一种线性数据结构,属于集合框架的一部分,实现了List接口和Deque接口。LinkedList以链表的形式存储元素,这使得它在添加和删除元素时具有较高的效率,尤其是在列表的中间或开头进行...

    使用LinkedList模拟堆栈

    本文将详细讲解如何使用Java中的LinkedList类来模拟这两种数据结构,并实现其基本操作。 堆栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构,它遵循“先进后出”的原则。常见的堆栈操作有压栈...

    Java LinkedList教程

    Java LinkedList 教程 Java LinkedList 是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。链表可分为单向链表和双向链表。一个单向链表包含两个...

    java LinkedList的实例详解

    "java LinkedList实例详解" Java LinkedList是一种基于链表的数据结构,在Java语言中广泛应用于实现队列、栈、双端队列等数据结构。下面将对Java LinkedList的实例进行详细的解释。 1. LinkedList类结构 Java ...

    Java实现LinkedList

    实现一个链表LinkedList,要求使用链表机构实现,并提供相应的add(Object o),remove(Object o)这两个方法.

    Java LinkedList集合功能实例解析

    Java LinkedList集合功能实例解析 Java LinkedList集合是Java集合框架中的一种重要实现,基于链表数据结构,提供了许多有用的方法来操作集合元素。下面对Java LinkedList集合的功能进行详细介绍。 LinkedList集合...

    LinkedList(Book).rar_Book 2_LinkedList java_java linkedlist_java

    实现一个链表称为循环链表的变化。链表应该能够被用来保留任何对象类型的数据。在一个循环链表的最后一个节点 相连字段不为空,而是指回第一个节点。你的执行应当至少包括以下操作: 1.... 2.... 3.... 4....

    Java 中Linkedlist类的源代码

    在Java编程语言中,LinkedList是一个实现List接口的类,它以双向链表的形式存储元素。这个数据结构允许我们在列表的任何位置进行插入和删除操作,具有O(1)的时间复杂度,这使得LinkedList在需要频繁进行这些操作时比...

    Java LinkedList 双向链表实现原理

    相信大家都明白 LinkedList 是基于双向链表而实现的,本篇文章主要讲解一下双向链表的实现,并且我们参考 LinkedList 自己实现一个单链表尝试一下。 什么是链表? 简单的来讲一下什么是链表:首先链表是一种线性的...

    java linkedlist

    Java中的LinkedList是一个实现双向链表的数据结构,它继承自AbstractList接口,并实现了List、Deque以及Cloneable和Serializable接口。LinkedList通常用于需要频繁插入和删除元素的场景,因为这些操作在链表中的时间...

    Java Linkedlist原理及实例详解

    Java LinkedList原理及实例详解 Java LinkedList是Java集合框架中的一种数据结构,属于链表结构,方便添加和删除元素,但查询不方便,适用于对收尾的操作。下面将详细介绍Java LinkedList的原理及实例详解。 ...

    Java用LinkedList实现的Stack

    栈是先进先出的原则,该类实现了栈的移入移除

    Java LinkedList的实现原理图文详解

    Java LinkedList 的实现原理图文详解 Java LinkedList 是一个通过双向链表实现的 List 和 Deque 接口,它允许插入所有元素,包括 null,并且它是线程不同步的。如果对双向链表这个数据结构很熟悉的话,学习 ...

    java LinkedList类详解及实例代码

    Java中的LinkedList类是Java集合框架的一部分,属于List接口的实现,它提供了线性数据结构的能力,同时保持了链表的特点。LinkedList不同于ArrayList,后者在内存中是连续存储的,而LinkedList则是通过节点对象链接...

    javalinkedlist:编写一个程序,演示您了解如何使用Java LinkedList类

    Java LinkedList类是Java集合框架的一部分,它位于`java.util`包中,主要用于创建和操作链表数据结构。链表是一种动态数据结构,其中元素不是在内存中连续存储的,而是通过节点之间的引用链接起来。LinkedList类实现...

    LinkedList实现栈

    首先,LinkedList类位于Java的`java.util`包中,它实现了List接口,允许我们存储和操作一系列元素。LinkedList内部维护了一个双向链表,每个元素都是一个Node对象,包含元素值以及指向前后节点的引用。由于...

    Java系列LinkedList

    **Java系列LinkedList** 链表是一种基础数据结构,它在计算机科学中扮演着重要角色,特别是在Java编程中。链表不按照线性顺序存储数据,而是每个节点存储数据以及指向下一个节点的引用。Java中的`LinkedList`类是...

    linkedList

    深入解析hashMap底层原理,非常深入的讲解了HashMap和相关的数据的等信息

Global site tag (gtag.js) - Google Analytics