队列与双端队列
队列允许你高效的在尾部添加元素,并在头部删除元素。
双端队列(deque):允许在头部和尾部都高效的添加或删除元素,不支持在中间添加元素。ArrayDeque和LinkedList实现了这个接口。
以下是两个接口的API:
java.util.Queue 5
- boolean add(E element)
- boolean offer(E element),如果队列没有满,将给定的元素添加到这个队列的队尾并返回true,如果队列已满,add方法将抛出IllegalStateException,此方法返回false。
- E remove()
- E poll(),加入队列不为空,删除并返回这个队列队头的元素,如果队列为空,第一个方法抛出NoSuchElementException而第二个方法返回null。
- E element()
- E peek(),如果队列不为空,返回这个队列头元素,但不删除,如果队列为空,错误同poll。
java.util.Deque 6
- void addFirst(E element)
- void addLast(E element)
- boolean offerFirst(E element)
- boolean offerLast(E element),将给定的对象添加到双端队列的队头或队尾,如果这个双端队列已满,前面两个方法将抛出一个IllegalStateException,而后面两个方法返回false。
- E removeFirst()
- E removeLast()
- E pollFirst()
- E pollLast(),如果这个双端队列不为空,删除并返回双端队列队头的元素。如果双端队尾为空,前面两个方法将抛出一个NoSuchElementException,而后面两个方法返回null。
- E getFirst()
- E getLast()
- E peekFirst()
- E peekLast(),如果这个双端队列非空,返回双端队列队头的元素,但不删除,如果双端队列为空,前面两个方法将抛出一个NoSuchElementException,后面两个方法返回null。
java.util.ArrayDeque 6
- ArrayDeque()
- ArrayDeque(int initialCapacity),用初始容量16或给定的初始容量构造一个无限定双端队列。
优先队列
- 任意顺序插入
- 按有序进行检索
- 调用remove获得最小元素
- 没有对这些元素进行排序
用堆数据结构,add和remove让最小元素移动到根。
常用在任务调度上,任务的优先级。