LinkedList的特点
- LinkedList是基于双向链表实现的有序集合;
- LinkedList是非线程安全的;
- LinkedList中的元素可重复,可为null值;
- LinkedList可实现快速的插入和删除操作,与ArrayList相比,LinkedList的增删操作效率更高,而查改操作效率较低;
- LinkedList实现了List接口,可进行列表操作;实现了Deque接口,可作为双端队列使用;实现了Cloneable接口,可克隆;实现了java.io.Serializable接口,可支持序列化,能通过序列化进行传输。
LinkedList的常用方法
方法 | 方法描述 |
---|---|
add(E e) | 将指定元素追加到列表末尾 |
offer(E e) | 将指定元素追加到列表末尾 |
add(int index,E e) | 将指定元素插入到列表指定位置 |
addAll(Collection<? extends E> c) | 将指定集合中所有元素追加到列表末尾 |
addAll(int index,Collection<? extends E> c) | 从列表指定位置插入指定集合中所有元素 |
addFirst(E e) | 在列表开头插入指定元素 |
offerFirst(E e) | 在列表开头插入指定元素 |
addLast(E e) | 在列表末尾追加指定元素 |
offerLast(E e) | 在列表末尾追加指定元素 |
方法 | 方法描述 |
---|---|
clear() | 删除列表所有元素 |
remove() | 删除列表头部(第一个元素) |
remove(int index) | 删除列表指定位置的元素 |
removeFirst() | 删除并返回第一个元素 |
removeLast() | 删除并返回最后一个元素 |
poll() | 删除并返回第一个元素 |
方法 | 方法描述 |
---|---|
contains(Object o) | 判断列表中是否存在指定元素 |
get(int index) | 获取列表指定位置的元素 |
getFirst() | 获取列表第一个元素 |
getLast() | 获取列表最后一个元素 |
indexOf(Object o) | 返回列表中指定元素第一次出现的索引 |
lastIndexOf(Object o) | 返回列表中指定元素最后一次出现的索引 |
peek() | 返回第一个元素(不删除) |
LinkedList与Deque
如上图所示,实线表示继承,虚线表示实现。LinkedList实现了Deque接口,在构造方法中若参数类型是Deque,则只能访问Deque接口所定义的方法,而不能直接访问LinkedList中的非Deque方法。
Deque的具体使用
//创建双端队列
Deque<Integer> deque=new LinkedList<>();
//添加元素
deque.offer(1);
deque.offer(2);
deque.addFirst(0);
deque.addLast(3);
System.out.println("添加元素后的队列:"+deque);
//获取元素
System.out.println("获取第2个元素:"+((LinkedList<Integer>) deque).get(2));
System.out.println("获取第1个元素:"+deque.getFirst());
System.out.println("获取最后一个个元素:"+deque.getLast());
//删除元素
deque.removeFirst();
System.out.println("删除第一个元素后的队列:"+deque);
deque.removeLast();
System.out.println("删除最后一个元素后的队列:"+deque);
输出结果:
添加元素后的队列:[0, 1, 2, 3]
获取索引为2的元素:2
获取第1个元素:0
获取最后一个个元素:3
删除第一个元素后的队列:[1, 2, 3]
删除最后一个元素后的队列:[1, 2]
LinkedList与栈
由于LinkedList是一个双端队列,因此可以选择队列的任意一端作为栈来使用。
//创建队列
Deque<Integer> stack=new LinkedList<>();
//选择队列的头部作为栈,从头部添加元素(压栈)
stack.offerFirst(1);
stack.offerFirst(2);
stack.push(3);
stack.push(4);
System.out.println("初始时栈的元素:"+stack);
//出栈
System.out.println("出栈:"+stack.pollFirst());
//获取栈顶值但不出栈
System.out.println("获取栈顶值:"+stack.peekFirst());
System.out.println("栈的元素:"+stack);
输出结果:
初始时栈的元素:[4, 3, 2, 1]
出栈:4
获取栈顶值:3
栈的元素:[3, 2, 1]