Руководство Java Queue
1. Queue
Queue (очередь) - это подинтерфейс of Collection, поэтому она обладает всеми функциями of Collection. В нем есть методы для доступа к первому элементу или его удаления, а также методы для вставки элемента в очередь. Если вы хотите получить доступ к определенному элементу, вы должны удалить все предшествующие ему элементы из очереди.
Queue- это Collection, которая позволяет дублировать элементы, но не элементы null.
Распространенный пример - очередь в баре. В то время как обслуживается только первый человек в очереди, новый человек будет вставлен где-то в очередь. Это может быть не последняя позиция, в зависимости от типа очереди и приоритета нового человека.
public interface Queue<E> extends Collection<E>
Иерархия интерфейсов в Java Collection Framework:
- Collection
- Deque
- BlockingQueue
- TransferQueue
- BlockingDeque
- Set
- List
- NavigableSet
- SortedSet
Иерархия классов в группе Queue:
Связь между интерфейсами и классами в группе Queue:
- LinkedList
- ArrayDeque
- PriorityQueue
- LinkedBlockingDeque
- ConcurrentLinkedQueue
- LinkedTransferQueue
- ArrayBlockingQueue
- ConcurrentLinkedDeque
- DelayQueue
- LinkedBlockingQueue
- PriorityBlockingQueue
- SynchronousQueue
LinkedList - это специальный класс, который принадлежит как группе List, так и группе Queue:
2. Методы Queue
Кроме методов, унаследованных от Collection, Queue также имеет свои собственные методы:
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
Throws exception | Returns special value | |
Insert | boolean add(E) | boolean offer(E) |
Remove | E remove() | E poll() |
Examine | E element() | E peek() |
boolean add(E)* / boolean offer(E)
boolean add(E) | Вставляет элемент в Queue. Если больше нет места для вставки, этот метод создает исключение. Метод возвращает true, если вставка выполнена успешно. |
boolean offer(E) | Вставляет элемент в Queue. Если в Queue больше нет пустого места или вставить не удалось, метод возвращает false. |
Когда элемент вставляется в Queue, его положение определяется типом Queue и приоритетом элемента. Вы не можете указать его положение.
В зависимости от типа используемого Queue он может ограничивать количество элементов или автоматически увеличивать их размер.
E remove()* / E poll()
E remove() | Возвращает первый элемент Queue и удаляет его из Queue. Этот метод создает исключение, если в Queue нет элементов. |
E poll() | Возвращает первый элемент Queue и удаляет его из Queue. Этот метод возвращает null, если в Queue нет элементов. |
E element() * / E peek()
E element() | Возвращает первый элемент Queue, но не удаляет его из Queue. Этот метод создает исключение, если в Queue нет элементов. |
E peek() | Возвращает первый элемент Queue, но не удаляет его из Queue. Этот метод возвращает null, если в Queue нет элементов. |
3. Examples
LinkedList(Queue)
LinkedList представляет собой традиционную очередь. Метод add/offer добавляют элемент в хвост этой очереди.
LinkedListEx1.java
package org.o7planning.queue.ex;
import java.util.LinkedList;
import java.util.Queue;
public class LinkedListEx1 {
public static void main(String[] args) {
// Create Queue
Queue<String> queue = new LinkedList<String>();
queue.offer("One");
queue.offer("Two");
queue.offer("Three");
queue.offer("Four");
queue.offer("Five");
String current;
while((current = queue.poll())!= null) {
System.out.println(current);
}
}
}
Output:
One
Two
Three
Four
Five
PriorityQueue
PriorityQueue - это Queue, которая может автоматически сортировать элементы по их приоритетному порядку или по предоставленному Comparator. Это означает, что элемент, вставленный в PriorityQueue, может находиться не в последней позиции.
Например, PriorityQueue<String> сортирует элементы в алфавитном порядке.
PriorityQueueEx1.java
package org.o7planning.queue.ex;
import java.util.PriorityQueue;
import java.util.Queue;
public class PriorityQueueEx1 {
public static void main(String[] args) {
// Create Queue
Queue<String> queue = new PriorityQueue<String>();
queue.offer("One");
queue.offer("Two");
queue.offer("Three");
queue.offer("Four");
queue.offer("Five");
String current;
while((current = queue.poll())!= null) {
System.out.println(current);
}
}
}
Output:
Five
Four
One
Three
Two
Руководства Java Collections Framework
- Руководство Java PriorityBlockingQueue
- Руководство Java Collections Framework
- Руководство Java SortedSet
- Руководство Java List
- Руководство Java Iterator
- Руководство Java NavigableSet
- Руководство Java ListIterator
- Руководство Java ArrayList
- Руководство Java CopyOnWriteArrayList
- Руководство Java LinkedList
- Руководство Java Set
- Руководство Java TreeSet
- Руководство Java CopyOnWriteArraySet
- Руководство Java Queue
- Руководство Java Deque
- Руководство Java IdentityHashMap
- Руководство Java WeakHashMap
- Руководство Java Map
- Руководство Java SortedMap
- Руководство Java NavigableMap
- Руководство Java HashMap
- Руководство Java TreeMap
- Руководство Java PriorityQueue
- Руководство Java BlockingQueue
- Руководство Java ArrayBlockingQueue
- Руководство Java TransferQueue
Show More