底层操作机制
源码图解0515
-
底层维护了一个双向链表,实现了双端队列特点
-
维护了两个属性,first,last 分别指向 首节点和尾节点
-
每个节点 (Node对象),又维护了prev,next,item
-
LinkedList元素的添加和删除,不是通过数组完成的,效率相对较高
-
线程不安全,没有实现同步
-
模拟LinkedList
javapackage chapter; public class LinkedList { public static void main(String[] args) { Node a = new Node("jack"); Node b = new Node("Tom"); Node c = new Node("Jerry"); //连接结点 a.next = b; b.next = c; c.prev = b; b.prev = a; Node first = a; //双向链表的头结点 Node last = c; //双向链表的尾结点 //遍历 前到后 System.out.println("================================="); 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; } //添加对象 Node d = new Node("smith"); d.next =c; d.prev = a; a.next =d; c.prev = d; //再次遍历 System.out.println("================================="); first = a; while(true){ if(first == null){ break; } System.out.println(first); first = first.next; } } } //定义一个Node类,即定义一个Node节点 class Node { public Object item; //存放数据的位置 public Node next; //后一个结点 public Node prev; //上一个结点 public Node(Object item) { this.item = item; } @Override public String toString() { return "Node{" + "item=" + item; } }
toString重写next prev 产生问题
方法
add()
remove()
比较
|------------|------|-----------|-------|
| | 底层结构 | 增删的效率 | 改查的效率 |
| ArrayList | 可变数组 | 较低 数组扩容 | 较高 |
| LinkedList | 双向链表 | 较高 通过链表追加 | 较低 |
- 改查操作多,ArrayList
- 增删操作多,LinkedList
- 一般程序中,大多为查询,故采用ArrayList
- 也可两个模块分别使用ArrayList LinkedList