首页 > 其他分享 >LinkedList

LinkedList

时间:2023-04-05 19:26:27浏览次数:47  
标签:Node LinkedList 元素 next newNode prev

LinkedList

LinkedList 是由一组元素串联而成的序列结构

链表是以Node对象为基础定义的一种序列结构

Node 结构中定义了它的前一个和后一个元素,这样每一个元素都可以通过next和prev 查找到前一个元素和后一个元素

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

由此构成了 一种序列关系。

LinkedList 初始化定义了 链表长度,头节点和尾节点

    transient int size = 0;

    /**
     * Pointer to first node.
     */
    transient Node<E> first;

    /**
     * Pointer to last node.
     */
    transient Node<E> last;

构造器 有两个

空参构造器:

    public LinkedList() {
    }

将Collection集合元素添加成列表

    public LinkedList(Collection<? extends E> c) {
        this();
        addAll(c);
    }

add (E e)

像链表末尾添加元素

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

直接向链表末尾添加元素,对象存储的last 节点 被设置为新的node,将原有的last的next设置为新的node。判断first 是否有值,如果没有将node同样赋值给first (意味着当前链表中仅有node一个元素),

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

add (int index , E element)

向指定位置添加元素,如果位置在链表末尾,则使用linklast 如果位置非末尾,使用linkbefore

    public void add(int index, E element) {
        checkPositionIndex(index);

        if (index == size)
            linkLast(element);
        else
            linkBefore(element, node(index));
    }

将当前位置的元素的前一项指向新元素,将当前位置元素前一项元素的下一项指向新元素

    void linkBefore(E e, Node<E> succ) {
        // assert succ != null;
        final Node<E> pred = succ.prev;
        final Node<E> newNode = new Node<>(pred, e, succ);
        succ.prev = newNode;
        if (pred == null)
            first = newNode;
        else
            pred.next = newNode;
        size++;
        modCount++;
    }

标签:Node,LinkedList,元素,next,newNode,prev
From: https://www.cnblogs.com/cod-fish/p/17290269.html

相关文章

  • LinkedList用法详解
    LinkedList用法详解https://blog.csdn.net/u013970897/article/details/106877472一、LinkedList简单介绍        LinkedList是List接口的实现类,因此......
  • 链表LinkedList(2)
    链表LinkedList(2)1.双向链表相较单链表的优势单链表只能顺着一个方向查找,而双向链表可以向前或向后查找;单链表不能自我删除,删除节点时需要找到待删除节点的前一个节......
  • ArrayList和LinkedList的区别
    实现接口不同。两个都实现了List接口,LinkedList还实现了Deque接口。底层实现不同。ArrayList是基于数组实现,LinkedList是基于链表实现。效率存在差异。由于底层实现不同......
  • 大白话+画图 从源码角度一步步搞懂ArrayList和LinkedList的使用
    1.说说ArrayList1.基本原理ArrayList,原理就是底层基于数组来实现。01.基本原理:数组的长度是固定的,java里面数组都是定长数组,比如数组大小设置为100,此时你不停的往Arra......
  • LinkedList 源码解读
    1.创建 LinkedListList<String>list=newLinkedList<>();list.add("wang");2.构造方法:开起了什么都没有做/***Constructsanemptylist.*/......
  • Java集合LinkedList源码中 实现 List 接口 却没有 在 LinkedList实现全部的 List接口
    Java集合LinkedList源码中实现List接口却没有在LinkedList实现全部的List接口方法普通类实现接口,应该实现接口中全部的抽象方法。难道是源码实现接口有什么特殊的......
  • LinkedList集合应用:实现队列
    LinkedList集合应用:实现队列题目:使用LinkedList类实现一个Queue(队列)类。Queue类应该具有以下功能:void enqueue(Eelement):将给定的元素添加到队列的末尾。Edeque......
  • java LinkedList 源码
    概述底层数据结构是双向链表(jdk1.6是双向循环,1.7开始不循环了),所以新增/删除效率高,查询/修改效率相对较低全能冠军:既是一个顺序容器,也是队列,还可以作为栈使用未实现Ran......
  • LinkedList类
    LinkedList底层使用数组存储数据,数据结构是链表链表相较于数组的优点:添加和删除时更加便捷,改变指针指向就行,不需要挪动位置缺点:内存空间占用更大添加数据addpackageL......
  • LinkedList
    LinkedListLinkerList使用的是双向链表,其基本的增删改查如下:增加示例代码如下:List<Object>list=newLinkedList<>();list.add(Objecte); //默认创建一个结点添加元......