- LinkedList实现了双向
链表
和双端队列
特点 - 可以添加任意元素(元素可以重复),包括null
- 线程不安全,没有实现同步
- LinkedList底层维护了一个双向链表
- LinkedList中维护了两个属性
first
和last
分别指向首节点
和尾节点
- 每个节点(
Node对象
),里面又维护了prev
,next
,item
三个属性,其中通过prev指向前一个,通过next指向后一个节点,最终实现双向链表 - 所以LinkedList的元素的添加和删除,不是通过数组完成的,相对效率较高
public class LinkedListDemo01 {
public static void main(String[] args) {
Node jack = new Node("jack");
Node tom = new Node("tom");
Node ll = new Node("ll");
jack.next = tom;
tom.next = ll;
ll.prev = tom;
tom.prev = jack;
Node first = jack;
Node last = ll;
while (true) {
if (first == null) {
break;
}
System.out.println(first);
first = first.next;
}
System.out.println("=========");
while (true) {
if (last == null) {
break;
}
System.out.println(last);
last = last.prev;
}
System.out.println("=========");
Node java = new Node("java");
java.prev = tom;
java.next = ll;
ll.prev = java;
tom.next = java;
first = jack;
while (true) {
if (first == null) {
break;
}
System.out.println(first);
first = first.next;
}
}
}
class Node {
public Object item;
public Node next;
public Node prev;
public Node(Object item) {
this.item = item;
}
@Override
public String toString() {
return "Node name = " + item;
}
}