Когда я пытаюсь:
Queue<Integer> q = new Queue<Integer>();
компилятор дает мне ошибку. Любая помощь?
Кроме того, если я хочу инициализировать очередь, мне нужно реализовать методы очереди?
Когда я пытаюсь:
Queue<Integer> q = new Queue<Integer>();
компилятор дает мне ошибку. Любая помощь?
Кроме того, если я хочу инициализировать очередь, мне нужно реализовать методы очереди?
Queue
- это интерфейс, который означает, что вы не можете создать Queue
напрямую.
Наилучшим вариантом является создание класса, который уже реализует интерфейс Queue
, например, одно из следующих: AbstractQueue
, ArrayBlockingQueue
, ArrayDeque
, ConcurrentLinkedQueue
, DelayQueue
, LinkedBlockingQueue
, LinkedList
, PriorityBlockingQueue
, PriorityQueue
или LinkedBlockingQueue
или SynchronousQueue
.
Альтернативой является написание собственного класса, который реализует необходимый интерфейс очереди. Это не требуется, за исключением тех редких случаев, когда вы хотите сделать что-то особенное, предоставляя остальной части вашей программы 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
- это интерфейс. Вы не можете создавать экземпляр интерфейса напрямую, кроме как через анонимный внутренний класс. Обычно это не то, что вы хотите сделать для коллекции. Вместо этого выберите существующую реализацию. Например:
Queue<Integer> q = new LinkedList<Integer>();
или
Queue<Integer> q = new ArrayDeque<Integer>();
Обычно вы выбираете реализацию коллекции по характеристикам производительности и concurrency, которые вас интересуют.
Queue<String> qe=new LinkedList<String>();
qe.add("b");
qe.add("a");
qe.add("c");
Поскольку Queue
является интерфейсом, вы не можете создать его экземпляр, как показано
Queue - это интерфейс, вы не можете явно создать очередь, вам нужно создать экземпляр одного из его классов реализации. Что-то вроде:
Queue linkedList = new LinkedList();
Интерфейс очереди расширяет java.util.Collection с дополнительными процессами вставки, извлечения и проверки, например:
+offer(element: E):
boolean// Вставка элемента
+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
Queue - это интерфейс в java, вы не можете этого сделать.
Вместо этого у вас есть два варианта:
option1:
Queue<Integer> Q = new LinkedList<>();
option2:
Queue<Integer> Q = new ArrayDeque<>();
Я рекомендую использовать параметр2, поскольку он бит быстрее, чем другой
Очередь в Java определена как интерфейс, и многие готовые к использованию реализации присутствуют как часть выпуска JDK. Вот некоторые из них: LinkedList, Очередь приоритетов, ArrayBlockingQueue, ConcurrentLinkedQueue, Связанная очередь передачи, Синхронная очередь и т.д.
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
- это интерфейс в java, вы не могли этого сделать.
попробуйте:
Queue<Integer> Q = new LinkedList<Integer>();