底层操作机制
源码图解0515
- 底层维护了一个双向链表,实现了双端队列特点
- 维护了两个属性,first,last 分别指向 首节点和尾节点
- 每个节点 (Node对象),又维护了prev,next,item
- LinkedList元素的添加和删除,不是通过数组完成的,效率相对较高
- 线程不安全,没有实现同步
- 模拟LinkedList
package 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;}@Overridepublic String toString() {return "Node{" +"item=" + item;} }
toString重写next prev 产生问题
方法
add()
remove()
比较
底层结构 | 增删的效率 | 改查的效率 | |
ArrayList | 可变数组 | 较低 数组扩容 | 较高 |
LinkedList | 双向链表 | 较高 通过链表追加 | 较低 |
- 改查操作多,ArrayList
- 增删操作多,LinkedList
- 一般程序中,大多为查询,故采用ArrayList
- 也可两个模块分别使用ArrayList LinkedList