PriorityQueue是一个基于优先级堆(binary heap)的无界优先队列。优先队列中的元素按照优先级进行排序,优先级最高的元素排在队列的前面。
默认构造函数:创建一个初始容量为11的空优先队列。
PriorityQueue<E> queue = new PriorityQueue<>();
带有初始容量的构造函数:创建一个指定初始容量的空优先队列。
PriorityQueue<E> queue = new PriorityQueue<>(initialCapacity);
带有初始容量和比较器的构造函数:创建一个指定初始容量和比较器的空优先队列。
比较器来控制数据的优先顺序
PriorityQueue<E> queue = new PriorityQueue<>(initialCapacity, comparator);
例如:
PriorityQueue<Integer> minHeap = new PriorityQueue<>(k, Comparator.comparingInt(a -> a));
常见方法:
| 方法名 | 描述 |
|---|---|
| add(E e) | 向队列中添加一个元素 |
| offer(E e) | 向队列中添加一个元素 |
| poll() | 获取并移除队列中优先级最高的元素 |
| peek() | 获取但不移除队列中优先级最高的元素 |
| size() | 返回队列中的元素数量 |
| isEmpty() | 判断队列是否为空 |
| clear() | 清空队列 |
| remove(Object o) | 从队列中移除指定元素 |
| contains(Object o) | 判断队列中是否包含指定元素 |
ArrayDeque是Java中的一个双端队列(deque),底层使用数组实现。它可以在两端进行高效地插入和删除操作,并且没有容量限制。
构造一个ArrayDeque对象可以使用以下方式:
默认构造函数:创建一个初始容量为16的空双端队列。
ArrayDeque<E> deque = new ArrayDeque<>();
带有初始容量的构造函数:创建一个指定初始容量的空双端队列。
ArrayDeque<E> deque = new ArrayDeque<>(initialCapacity);
常见的ArrayDeque方法包括:
| 方法名 | 描述 |
|---|---|
| addFirst(E e) | 在队列头部添加一个元素 |
| addLast(E e) | 在队列尾部添加一个元素 |
| offerFirst(E e) | 在队列头部添加一个元素 |
| offerLast(E e) | 在队列尾部添加一个元素 |
| pollFirst() | 获取并移除队列头部的元素 |
| pollLast() | 获取并移除队列尾部的元素 |
| peekFirst() | 获取但不移除队列头部的元素 |
| peekLast() | 获取但不移除队列尾部的元素 |
| size() | 返回队列中的元素数量 |
| isEmpty() | 判断队列是否为空 |
| clear() | 清空队列 |
| removeFirst() | 移除并返回队列头部的元素 |
| removeLast() | 移除并返回队列尾部的元素 |
| contains(Object o) | 判断队列中是否包含指定元素 |
除了上述方法,ArrayDeque还有其他一些方法,可以根据具体需求进行使用。
以下是整理成的表格:
| 方法名 | 描述 |
|---|---|
| addFirst(E e) | 在队列头部添加一个元素 |
| addLast(E e) | 在队列尾部添加一个元素 |
| offerFirst(E e) | 在队列头部添加一个元素 |
| offerLast(E e) | 在队列尾部添加一个元素 |
| pollFirst() | 获取并移除队列头部的元素 |
| pollLast() | 获取并移除队列尾部的元素 |
| peekFirst() | 获取但不移除队列头部的元素 |
| peekLast() | 获取但不移除队列尾部的元素 |
| size() | 返回队列中的元素数量 |
| isEmpty() | 判断队列是否为空 |
| clear() | 清空队列 |
| removeFirst() | 移除并返回队列头部的元素 |
| removeLast() | 移除并返回队列尾部的元素 |
| contains(Object o) | 判断队列中是否包含指定元素 |
BlockingQueue是Java中的一个阻塞队列,它继承了Queue接口,并提供了一些阻塞操作的方法。阻塞队列在没有空间时会阻塞插入操作,当队列为空时会阻塞获取操作,从而实现线程安全的队列操作。
构造一个BlockingQueue对象可以使用以下方式:
ArrayBlockingQueue构造函数:创建一个基于数组的有界阻塞队列。
BlockingQueue<E> queue = new ArrayBlockingQueue<>(capacity);
LinkedBlockingQueue构造函数:创建一个基于链表的可选界限阻塞队列。
BlockingQueue<E> queue = new LinkedBlockingQueue<>();
PriorityBlockingQueue构造函数:创建一个基于优先级的无界阻塞队列。
BlockingQueue<E> queue = new PriorityBlockingQueue<>();
SynchronousQueue构造函数:创建一个没有缓冲区的阻塞队列。
BlockingQueue<E> queue = new SynchronousQueue<>();
常见的BlockingQueue方法包括:
| 方法名 | 描述 |
|---|---|
| put(E e) | 将一个元素插入队列中,若队列已满则阻塞等待 |
| offer(E e, long timeout, TimeUnit unit) | 将一个元素插入队列中,在指定时间内等待空闲容量 |
| take() | 获取并移除队列头部的元素,若队列为空则阻塞等待 |
| poll(long timeout, TimeUnit unit) | 获取并移除队列头部的元素,在指定时间内等待队列非空 |
| peek() | 获取但不移除队列头部的元素 |
| size() | 返回队列中的元素数量 |
| isEmpty() | 判断队列是否为空 |
| clear() | 清空队列 |
| remove(Object o) | 从队列中移除指定元素 |
| contains(Object o) | 判断队列中是否包含指定元素 |
除了上述方法,BlockingQueue还有其他一些方法,可以根据具体需求进行使用。
以下是整理成的表格:
| 方法名 | 描述 |
|---|---|
| put(E e) | 将一个元素插入队列中,若队列已满则阻塞等待 |
| offer(E e, long timeout, TimeUnit unit) | 将一个元素插入队列中,在指定时间内等待空闲容量 |
| take() | 获取并移除队列头部的元素,若队列为空则阻塞等待 |
| poll(long timeout, TimeUnit unit) | 获取并移除队列头部的元素,在指定时间内等待队列非空 |
| peek() | 获取但不移除队列头部的元素 |
| size() | 返回队列中的元素数量 |
| isEmpty() | 判断队列是否为空 |
| clear() | 清空队列 |
| remove(Object o) | 从队列中移除指定元素 |
| contains(Object o) | 判断队列中是否包含指定元素 |
ArrayDeque是Java中的双端队列,它可以在两端高效地插入和删除元素,因而具有比Stack和LinkedList更好的性能。
构造一个ArrayDeque对象可以使用以下方式:
无参构造函数:创建一个空的ArrayDeque。
ArrayDeque<E> deque = new ArrayDeque<>();
带初始容量的构造函数:创建指定容量的ArrayDeque。
ArrayDeque<E> deque = new ArrayDeque<>(initialCapacity);
常见的ArrayDeque方法包括:
| 方法名 | 描述 |
|---|---|
| addFirst(E e) | 在队头插入元素,如果队列已满则抛出异常 |
| addLast(E e) | 在队尾插入元素,如果队列已满则抛出异常 |
| offerFirst(E e) | 在队头插入元素,如果队列已满则返回false |
| offerLast(E e) | 在队尾插入元素,如果队列已满则返回false |
| removeFirst() | 获取并移除队头元素,如果队列为空则抛出异常 |
| removeLast() | 获取并移除队尾元素,如果队列为空则抛出异常 |
| pollFirst() | 获取并移除队头元素,如果队列为空则返回null |
| pollLast() | 获取并移除队尾元素,如果队列为空则返回null |
| getFirst() | 获取队头元素,如果队列为空则抛出异常 |
| getLast() | 获取队尾元素,如果队列为空则抛出异常 |
| peekFirst() | 获取队头元素,如果队列为空则返回null |
| peekLast() | 获取队尾元素,如果队列为空则返回null |
| size() | 返回队列中的元素数量 |
| isEmpty() | 判断队列是否为空 |
| clear() | 清空队列 |
| contains(Object o) | 判断队列中是否包含指定元素 |
除了上述方法,ArrayDeque还有其他一些方法,可以根据具体需求进行使用。
以下是整理成的表格:
| 方法名 | 描述 |
|---|---|
| addFirst(E e) | 在队头插入元素,如果队列已满则抛出异常 |
| addLast(E e) | 在队尾插入元素,如果队列已满则抛出异常 |
| offerFirst(E e) | 在队头插入元素,如果队列已满则返回false |
| offerLast(E e) | 在队尾插入元素,如果队列已满则返回false |
| removeFirst() | 获取并移除队头元素,如果队列为空则抛出异常 |
| removeLast() | 获取并移除队尾元素,如果队列为空则抛出异常 |
| pollFirst() | 获取并移除队头元素,如果队列为空则返回null |
| pollLast() | 获取并移除队尾元素,如果队列为空则返回null |
| getFirst() | 获取队头元素,如果队列为空则抛出异常 |
| getLast() | 获取队尾元素,如果队列为空则抛出异常 |
| peekFirst() | 获取队头元素,如果队列为空则返回null |
| peekLast() | 获取队尾元素,如果队列为空则返回null |
| size() | 返回队列中的元素数量 |
| isEmpty() | 判断队列是否为空 |
| clear() | 清空队列 |
| contains(Object o) | 判断队列中是否包含指定元素 |
LinkedList是Java中的链表,它可以用于实现队列、栈等数据结构。构造一个LinkedList对象可以使用以下方式:
无参构造函数:创建一个空的LinkedList。
LinkedList<E> linkedList = new LinkedList<>();
使用Collection类型参数的构造函数:创建一个包含指定集合的LinkedList。
LinkedList<E> linkedList = new LinkedList<>(collection);
常见的LinkedList方法包括:
| 方法名 | 描述 |
|---|---|
| add(E e) | 在链表末尾添加元素 |
| addFirst(E e) | 在链表头部添加元素 |
| addLast(E e) | 在链表末尾添加元素 |
| offer(E e) | 在链表末尾添加元素,如果插入成功则返回true |
| offerFirst(E e) | 在链表头部添加元素,如果插入成功则返回true |
| offerLast(E e) | 在链表末尾添加元素,如果插入成功则返回true |
| remove() | 移除并返回链表的头部元素 |
| removeFirst() | 移除并返回链表的头部元素 |
| removeLast() | 移除并返回链表的尾部元素 |
| poll() | 移除并返回链表的头部元素,如果链表为空则返回null |
| pollFirst() | 移除并返回链表的头部元素,如果链表为空则返回null |
| pollLast() | 移除并返回链表的尾部元素,如果链表为空则返回null |
| getFirst() | 返回链表的头部元素,如果链表为空则抛出异常 |
| getLast() | 返回链表的尾部元素,如果链表为空则抛出异常 |
| peek() | 返回链表的头部元素,如果链表为空则返回null |
| peekFirst() | 返回链表的头部元素,如果链表为空则返回null |
| peekLast() | 返回链表的尾部元素,如果链表为空则返回null |
| size() | 返回链表中的元素数量 |
| isEmpty() | 判断链表是否为空 |
| clear() | 清空链表 |
| contains(Object o) | 判断链表中是否包含指定元素 |