Когда я пытаюсь:
Queue<Integer> q = new Queue<Integer>();
компилятор выдает ошибку. Любая помощь?
Кроме того, если я хочу инициализировать очередь, нужно ли мне реализовать методы очереди?
Когда я пытаюсь:
Queue<Integer> q = new Queue<Integer>();
компилятор выдает ошибку. Любая помощь?
Кроме того, если я хочу инициализировать очередь, нужно ли мне реализовать методы очереди?
Queue
это интерфейс. grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/…
Ответы:
A Queue
- это интерфейс, что означает, что вы не можете создать Queue
напрямую.
Наилучшим вариантом является построение от класса , который уже реализует Queue
интерфейс, как один из следующих: AbstractQueue
, ArrayBlockingQueue
, ArrayDeque
, ConcurrentLinkedQueue
, DelayQueue
, LinkedBlockingQueue
, LinkedList
, PriorityBlockingQueue
, PriorityQueue
, или SynchronousQueue
.
Альтернативный вариант - написать собственный класс, реализующий необходимый интерфейс Queue. Это не требуется, за исключением тех редких случаев, когда вы хотите сделать что-то особенное, предоставляя остальной части вашей программы расширение Queue
.
public class MyQueue<T extends Tree> implements Queue<T> {
public T element() {
... your code to return an element goes here ...
}
public boolean offer(T element) {
... your code to accept a submission offer goes here ...
}
... etc ...
}
Еще менее используемая альтернатива - создание анонимного класса, который реализует Queue
. Вы, вероятно, не захотите этого делать, но это указано как вариант, чтобы охватить все основы.
new Queue<Tree>() {
public Tree element() {
...
};
public boolean offer(Tree element) {
...
};
...
};
Queue
... но в любом случае +1.
ArrayDeque
Queue
это интерфейс. Вы не можете создать экземпляр интерфейса напрямую, кроме как через анонимный внутренний класс. Обычно это не то, что вы хотите сделать для коллекции. Вместо этого выберите существующую реализацию. Например:
Queue<Integer> q = new LinkedList<Integer>();
или
Queue<Integer> q = new ArrayDeque<Integer>();
Обычно вы выбираете реализацию коллекции по интересующим вас характеристикам производительности и параллелизма.
Queue<String> qe=new LinkedList<String>();
qe.add("b");
qe.add("a");
qe.add("c");
Поскольку Queue
это интерфейс, вы не можете создать его экземпляр, как вы проиллюстрировали.
java.util.Queue
это интерфейс. Вы не можете создавать экземпляры интерфейсов. Вам необходимо создать экземпляр класса, реализующего этот интерфейс. В данном случае таким классом является LinkedList.
Stack<String> stack = new Stack<>(); stack.push("a"); stack.push("b"); System.out.println(stack.pop());
import java.util.Stack;
Очередь - это интерфейс; вы не можете явно создать очередь. Вам нужно будет создать экземпляр одного из его реализующих классов. Что-то типа:
Queue linkedList = new LinkedList();
Интерфейс Queue расширяет java.util.Collection дополнительными операциями вставки, извлечения и проверки, например:
+offer(element: E):
логическое // Вставка элемента
+poll(): E
// Извлекает элемент и возвращает NULL, если очередь пуста
+remove(): E
// Извлекает и удаляет элемент и выдает исключение, если очередь пуста
+peek(): E
// Извлекает, но не удаляет заголовок этой очереди, возвращая null, если эта очередь пуста.
+element(): E
// Извлекает, но не удаляет заголовок этой очереди, выдает исключение, если очередь te пуста.
Пример кода для реализации очереди:
java.util.Queue<String> queue = new LinkedList<>();
queue.offer("Hello");
queue.offer("StackOverFlow");
queue.offer("User");
System.out.println(queue.peek());
while (queue.size() > 0){
System.out.println(queue.remove() + " ");
}
//Since Queue is empty now so this will return NULL
System.out.println(queue.peek());
Вывод кода:
Hello
Hello
StackOverFlow
User
null
Очередь в Java определяется как интерфейс, и многие готовые к использованию реализации представлены как часть выпуска JDK. Вот некоторые из них: LinkedList , Priority Queue, ArrayBlockingQueue, ConcurrentLinkedQueue, Linked Transfer Queue, Synchronous Queue и т. Д.
SO Вы можете создать любой из этих классов и сохранить его как ссылку на очередь. например
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main (String[] args) {
Queue que = new LinkedList();
que.add("first");
que.offer("second");
que.offer("third");
System.out.println("Queue Print:: " + que);
String head = que.element();
System.out.println("Head element:: " + head);
String element1 = que.poll();
System.out.println("Removed Element:: " + element1);
System.out.println("Queue Print after poll:: " + que);
String element2 = que.remove();
System.out.println("Removed Element:: " + element2);
System.out.println("Queue Print after remove:: " + que);
}
}
Вы также можете реализовать свою собственную очередь, реализующую интерфейс Queue.