Java集合中的LinkedList

什么是LinkedList

1 LinkedList 是一个 Doubly-linked list双向连表,实现了Deque接口,该接口中定义了双向连表的一般操作。

2 LinkedList 也实现了List接口,所以List包含的基本方法(新增,删除,插入等)LinkedList都实现了。

3 LinkedList 也继承了AbstractSequentialList该类中定义了顺序访问所需实现的方法。

顺序访问:数据是有序的,访问也是有序的,获取元素必须从头开始遍历比对,不能直接以数组的方式获取指定索引位上的值。

随机访问:随机访问可以通过随机访问方法直接获取指定索引位上的值如ArrayListget(int index), set(int index, E element), add(int index, E element) and remove(int index)

双向连表数据结构及相关操作

1.基本结构

Java集合中的LinkedList_第1张图片

双向连表包含的基本元素包含直接前驱、直接后继、值域,直接前驱指向前一个节点地址,直接后继指向后一个节点地址,直接前驱为空时是头节点,直接后继为空时是尾节点

2.基本操作(add,remove过程相反)

Java集合中的LinkedList_第2张图片

在双向连表中插入节点时需要改变插入位置前后两个节点的直接前驱和直接后继的指向如图所示

LinkedList的实现

LinkedList 在内部是通过一个私有的静态内部类来实现连表的,内部类代码如下

transient Node first; // 头节点
transient Node last; // 尾节点
private static class Node {
    // 存放数据
    E item;
    // 直接后继
    Node next;
    // 直接前驱
    Node prev;
    Node(Node prev, E element, Node next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}

LinkedList的操作都是围绕着first last这两个对象来进行。

LinkedList 的其他相关内容

1.0 和 ArrayList 相比

虽然两种数据结构都可以当List来用,但是对于不同的数据操作而言,性能和开销是不等的。ArrayList 身为Array的实现,优势体现在 随机访问上,而LinkedList是通过连表来实现,则其优势便体现在了 删除和插入操作上。

2.0 线程安全问题

LinkedList是线程不安全的实现,若要使用线程安全的LinkedList则需要你通过 List list = Collections.synchronizedList(new LinkedList(...))来获取。

3.0 并发修改异常

原理类似ArrayList 参考: ArrayList

你可能感兴趣的:(java,linkedlist)