ArrayList概述
ArrayList底层用数组实现,可以看作是能够自动增长容量的数组。其搜索、读取的效率比较高,可以快速随机访问,但插入、删除的效率比较低。
常用方法:
- 获取指定位置元素:get();
- 添加元素:add();
- 删除元素:remove();
- 返回集合长度:size();
- 判断是否含有指定元素:contains();
LinkedList概述
LinkedList底层是基于双向链表实现的,其插入、删除的效率比较高,但搜索和读取的效率低,不能快速随机访问。LinkedList和ArrayList都实现了List接口,因此LinkedList也实现了ArrayList的常用方法。此外,LinkedList还实现了Deque接口,Deque接口是Queue接口的子接口,它代表一个双端队列。
注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。Deque堆栈操作方法:push()、pop()、peek()。
Deque有三种用途:
- 用作双端队列: Deque<T> deque = new LinkedList<>();
- 用作队列: Deque<T> queue = new LinkedList<>();
- 用作栈: Deque<T> stack = new LinkedList<>();
Deque作为双端队列
操作失败时抛出异常:
- 头部插入:addFirst();
- 头部删除:removeFirst();
- 头部查看:getFirst();
- 尾部插入:addLast();
- 尾部删除:removeLast();
- 尾部查看:getLast();
操作失败时返回特殊值(null或false) - 头部插入:offerFirst();
- 头部删除:pollFirst();
- 头部查看:peekFirst();
- 尾部插入:offerLast();
- 尾部删除:pollLast();
- 尾部查看:peekLast();
Deque作为队列
操作失败时抛出异常:
- 插入:add(); <=> addLast();
- 删除:remove(); <=> removeFirst();
- 查看:element(); <=> getFirst();
操作失败时返回特殊值(null或false) - 插入:offer(); <==> offerLast();
- 删除:poll(); <==> pollFirst();
- 查看:peek(); <==> peekFirst();
Deque作为栈
- 插入:push(); <=> addFirst();
- 删除:pop(); <=> removeFirst();
- 查看:peek(); <=> peekFirst();