简介:
LinkedList是List接口的实现类【存储结构是链表,特点:每个元素分配的空间不必连续、插入和删除元素时速度非常快、但访问元素的速度较慢】
ArrayList 也是List接口的实现类【存储结构是线性表】
LinkedList 是一个双向链表,当数据量很大或者操作很频繁的情况下,添加和删除元素时具有比ArrayList更好的性能。但在元素查询和修改方便要弱于ArrayList。LinkedList类每个结点用内部类Node表示,LInkedList通过first和last引用分别只想链表的第一个和最后一个元素,当链表为空时,first和last都为NULL值。LinkedList数据结构如下图所示:
//存储对象的结构Node,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;
}
}
Node节点一共有三个属性:item代表节点值,prev代表节点的前一个节点,next代表节点的后一个节点。每个节点都有一个前驱和后继结点,并且在LinkedList中也定义了两个变量分别指向链表的第一个和最后一个节点。
transient Node<E> first;
transient Node<E> last;
1、添加元素到LinkedList
LinkedList提供了多个添加元素的方法;
- Boolean add(E e) :在链表尾部添加一个元素,如果成功,返回true,否则返回false。
- void addFirst(E e):在链表头部插入一个元素。
- addLast(E e): 在链表尾部 插入一个元素。
- void add(int index,E element): 在指定位置插入一个元素。
添加元素到LinkedList示例代码如下:
package addDemo; import java.util.LinkedList; public class LinkedListAddDemo{ public static void main(String[] args){ LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("first"); linkedList.add("second"); linkedList.add("third"); System.out.println(linkedList); linkedList.addFirst("addFirst"); System.out.println(linkedList); linkedList.addLast("addLast"); System.out.println(linkedList); linkedList.add(2,"addByIndex"); System.out.println(linkedList); } }