Deque
Deque接口既可以用作先进后出的栈,也可以用作先进先出的队列。
Java Doc里建议用Deque替代Stack接口完成栈的功能,所以我们不再使用Stack类实现,
在JavaDoc for Deque中它这样说:
双端队列也可以用作LIFO(后进先出)堆栈。此接口应优先于旧版Stack类使用。当双端队列用作堆栈时,元素从双端队列的开头被压入并弹出。
栈
ArrayDeque
实现:通过Deque接口实现
Deque<Integer> stack = new ArrayDeque<>();
常用方法:
入栈:
push()
出栈:
pop()
返回栈顶:
peek()
返回栈的大小
size()
判断栈空:
isEmpty()
队列【双端队列】
ArrayDeque
实现:和栈相同,虽然方法一样,比如push()和add()虽然都是添加元素,但效果截然不同,一个是添加到栈顶,一个是添加到队尾。注意自己要使用的数据结构需要的操作方法。
Deque<Integer> queue = new ArrayDeque<>();
常用方法:
插入:
addfirst和offerFirst在队头插入元素,addLast和offerLast在队尾插入元素。 如果队列的大小是限定的, 推荐优先使用offerFirst和offerLast, 因为addfirst和addLast会在队列满的时候抛出异常。
删除:
removeFirst和pollFirst 从队头移除元素,removeLast和pollLast从队尾移除元素。如果队列是空,pollFirst和pollLast 会返回空, 但是removeFirst和removeLast会抛出异常。
获取:
getFirst 和 peekFirst 方法获取队列的第一个元素。这些方法不会移除队列中的元素。相应的getLast 和peekLast获取队列中最后一个元素。当队列是空的时候, peekFirst和peekLast返回空,但是getFirst 和 getLast会抛出异常。
返回栈的大小
size()
判断队列空:
isEmpty()
链表
ArrayList 适合需要大量查改的操作
LinkedList 适合需要大量增删的操作
实现:
List<Integer> list = new ArrayList<>();
List<Integer> list2 = new LinkedList<>();
常用方法:
add() 添加元素
set() 修改方法
size() 方法
addAll(Collection<> c) 将另一个Collection集合的元素全部添加进来
remove(int index) 删除下标为index 的元素
indexOf(Object o) 返回元素 o 的下标