Где класс Queue в сборниках Java?
Я вижу только интерфейс Queue, нет ли класса Queue в коллекциях Java?
Ответы
Ответ 1
Javadocs предоставляют список классов, которые реализуют Queue
.
Все известные классы реализации:
AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedBlockingDeque, LinkedList, PriorityBlockingQueue, PriorityQueue, SynchronousQueue
Есть также некоторые подинтерфейсы, которые могут вам пригодиться:
Все известные субинтерфейсы:
BlockingDeque <E> , BlockingQueue <E> , Deque < Е >
Ответ 2
В очереди есть несколько реализаций: из API:
Все известные классы реализации:
AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue,
DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList,
PriorityBlockingQueue, PriorityQueue, SynchronousQueue
Обратите внимание, что AbstractQueue не является конкретным классом.
Некоторые из них относятся к пакету одновременно, поэтому, если вы выполняете задание или что-то подобное, вы должны перейти на ConcurrentLinkedQueue или PriorityBlockingQueue (для кучи) для ex.
Ответ 3
В документации для Queue
перечислены различные реализации, в том числе
Выберите реализацию, которая соответствует вашим потребностям.
Ответ 4
Помимо использования документов API для поиска "всех известных классов реализации" часто существуют другие непубличные реализации, которые, тем не менее, доступны через публичный API (только без необходимости использования бессмысленной документации). Если вы нажмете на " use, вы также найдете Коллекции .asLifoQueue (Deque
уже есть Queue
, но это FIFO, а не стек).
Ответ 5
http://java.sun.com/javase/6/docs/api/java/util/Queue.html - см. раздел "Все известные классы внедрения". Существует множество реализаций, которые подходят для разных целей.
Ответ 6
Несмотря на то, что ответы кажутся несколько презрительными, они на самом деле довольно классны, обучая вас, как ловить рыбу. Очередь - это просто способ взглянуть на коллекцию, поэтому многие коллекции могут ее реализовать. Кроме того, вещи, которые действуют как коллекции, но с определенной другой логикой (например, очереди потоков), могут использовать один и тот же интерфейс.
Знать, где смотреть на javadocs, - большая помощь. Я уверен, что вы посмотрели, но просто не думали смотреть на реализации. Живи и учись.
Иногда вам также придется преследовать списки подкласса/расширений. Например, если вы посмотрели на Queue и увидели AbstractQueue, вы можете увидеть, какие классы реализуют это.
Я избавлюсь от одного из ваших -1s для ya:)
Ответ 7
Нет, нет класса Queue
, потому что существует множество различных способов реализации очереди, и вам нужно выбрать тот, который подходит для вашего прецедента. То же самое относится к любому из других коллекций в рамках коллекций - например, ArrayList
и LinkedList
оба реализуют List
. Общий шаблон, который является хорошим использованием наследования объектов, заключается в следующем:
Интерфейс, например. Queue
, определяет роль, которую должен играть объект;
Под-интерфейсы, например. Deque
, далее расширяется или специализируется на роли - в этом случае очередь "deque" или двойная очередь позволяет вам добавлять и удалять элементы с обоих концов очереди, а не только добавлять назад и удалять из спереди;
Классы предоставляют реализацию того, как объект выполняет роль. Например, ArrayDeque
использует масштабируемый массив для реализации очереди с двойным завершением, которая имеет разные сильные и слабые стороны для LinkedList
, которая использует связанный список.
Чтобы понять идею интерфейса как роли, обратите внимание, что даже если ArrayDeque
реализует Deque
, вы можете использовать его как Queue
, не беспокоясь об этом, потому что реализация обоих интерфейсов означает, что он может играть обе роли. Аналогично, LinkedList
может носить шляпу List
, Queue
или Deque
.
По этой причине обычным (рекомендуемым) способом использовать что-то вроде структуры Collections является программирование интерфейса, то есть использование интерфейса при использовании класса, а не самого имени класса. Например, вы должны создать экземпляр объекта следующим образом:
Queue<String> logQueue = new ConcurrentLinkedQueue<String>();
...
logQueue.add("Log message");
Таким образом, вы
- не привязан к определенному классу и может использовать замену при необходимости, без необходимости изменять код, и
- документируют, что вы делаете с классом, называя роль, которую он играет. Общий принцип, которым это помогает, - это самодокументирующий код, который, по сути, позволяет самому коду быть понятным без использования комментариев и т.д.
Ответ 8
import java.util.Queue;
просто
Enqueue function == Queue_Object.add(input_value);
Dequeue function == Queue_Object.pull(); //return the value and delete it from queue
Ответ 9
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
queue.add(3);
while (!queue.isEmpty()) {
System.out.println(queue.remove());// prints 1 2 3
}