LinkedList内部实现原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinkedList内部实现原理相关的知识,希望对你有一定的参考价值。

LinkedList内部实现原理

ArrayList内部原理一样

我们先创建一个LinkedList对象LinkedList<String> li = new LinkedList<>();,然后查看其构造方法

	transient Node<E> first;
	
	transient Node<E> last;
	
	public LinkedList() {
    }

比较尴尬的是在它的构造方法中什么也没有写。LinkedList的结构是**双向链表结构**,链表结构数据是存储在节点中的,我们正好看到两个Node节点属性,一个叫first代表链表中第一个节点,另一个叫last代表链表中最后一个节点。

查看一下Node

 	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;
        }

这是一个内部类,标准的双向链表的数据结构Node<E> prev前驱指向该节点的前一个节点,Node<E> next;后继指向该节点的后一个节点,E item;元素用于存放数据。

当我们执行add()方法向LinkedList中添加数据的时候,调用以下方法

	public boolean add(E e) {
        linkLast(e);
        return true;
    }

	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(最后一个节点)给了l节点,然后new了一个新的节点初始化新节点的前驱为l节点,后继为null,元素为我们要存放的对象。然后设置newNodelast节点,如果节点lnull则设置newNodefirst节点,否则使lnext指向新的节点 l.next = newNode

技术分享

FirstLastNode

技术分享

内部原理



以上是关于LinkedList内部实现原理的主要内容,如果未能解决你的问题,请参考以下文章

LinkedList实现原理

LinkedList与ArrayList的区别(内部实现)

LinkedList实现原理

arraylist和linkedlist内部的实现大致是怎样的

LinkedList的实现原理

ArrayList和LinkedList内部是怎么实现的?他们之间的区别和优缺点?