队列和优先队列
队列是一种先进先出的结构。元素被追加到队列末尾,然后从队列列头删除;优先队列中,元素被赋予优先级。访问元素时,最高优先级的元素先被删除
Queue接口
该接口继承java.util.Collection,加入了插入、提取和检验操作:
《interface》 java.util.Queue | |
---|---|
offer(element: E):boolean | 插入一个元素到队列中 |
poll():E | 获取并移除队列的头元素,若队头为空返回null |
remove(): E | 获取并移除队列的头元素,队头为空抛出异常 |
peek(): E | 获取但不移除头元素,若队列为空返回null |
element(): E | 获取但不移除头元素,队列为空抛出异常 |
双端队列Deque和链表LinkedList
LinkedList实现了Deque接口,Deque又继承了Queue接口;LinkedList适合用于队列操作,它可以高效地在列表的两端插入和移除元素
Deque支持在两端插入和删除元素,增加了相关的方法
- addFirst(e)
- removeFirst()
- addLast()
- removeLast()
- getFirst()
- getLast()
public class TestDeque {
public static void main(String[] args) {
LinkedList<String> deque = new LinkedList<>();
deque.add("张三");
deque.add("李四");
deque.add("王五");
deque.add("赵六");
deque.addFirst("刘伟");
deque.removeLast();
deque.removeFirst();
System.out.println("第一个元素是:" + deque.getFirst() + " " + "最后一个元素是:" + deque.getLast());
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6px3BLgX-1684848863528)(C:\Users\26399\AppData\Roaming\Typora\typora-user-images\image-20230523210250400.png)]
PriorityQueue类实现了一个优先队列,默认情况下优先队列使用Comparable以元素的自然顺序排序;拥有最小数值的元素被赋予最高优先级,因此最先从列表中删除。几个元素具有相同的最高优先级,随机选择一个;也可以使用PriorityQueue(initialCapacity, comparator) 构造方法指定一个顺序
java.util.PriorityQueue | |
---|---|
PriorityQueue() | 创建一个初始容量为11的默认优先队列 |
PriorityQueue(initialCapacity: int) | 创建一个初始容量为指定值的默认优先队列 |
PriorityQueue(c:Collection<? extends E>) | 使用指定合集创建一个优先队列 |
PriorityQueue(initialCapacity: int, comparator<? extends E>) | 创建一个指定初始容量和比较器的优先队列 |