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]
本文详细介绍了LinkedList的特点,包括其非线程安全、元素可重复以及高效的增删操作。LinkedList作为List和Deque接口的实现,支持多种插入、删除、查找和获取元素的方法。示例展示了LinkedList如何作为双端队列使用,以及如何利用其特性作为栈来操作元素。文章还探讨了LinkedList在不同场景下的应用,强调了其在数据操作上的优势。
3039

被折叠的 条评论
为什么被折叠?



