Как создать экземпляр объекта Queue в Java? - PullRequest
136 голосов
/ 07 января 2011

Когда я пытаюсь:

Queue<Integer> q = new Queue<Integer>();

компилятор выдает мне ошибку. Любая помощь?

Кроме того, если я хочу инициализировать очередь, должен ли я реализовать методы этой очереди?

Ответы [ 8 ]

144 голосов
/ 07 января 2011

A Queue - это интерфейс, что означает, что вы не можете создать Queue напрямую.

Лучшим вариантом является создание класса, который уже реализует интерфейс Queue, как один изследующие: AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue или SynchronousQueue.

Anальтернатива - написать свой собственный класс, который реализует необходимый интерфейс очереди.Это не требуется, за исключением тех редких случаев, когда вы хотите сделать что-то особенное, предоставляя остальной части вашей программы 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) {
     ...
   };
   ...
};
143 голосов
/ 07 января 2011

Queue - это интерфейс. Вы не можете создать экземпляр интерфейса напрямую, кроме как через анонимный внутренний класс. Обычно это не , что вы хотите сделать для коллекции. Вместо этого выберите существующую реализацию. Например:

Queue<Integer> q = new LinkedList<Integer>();

или

Queue<Integer> q = new ArrayDeque<Integer>();

Обычно вы выбираете реализацию коллекции по интересующим вас характеристикам производительности и параллелизма.

42 голосов
/ 07 января 2011
Queue<String> qe=new LinkedList<String>();

qe.add("b");
qe.add("a");
qe.add("c");

Поскольку Queue является интерфейсом, вы не можете создать его экземпляр, как показано

14 голосов
/ 07 января 2011

Очередь - это интерфейс, вы не можете явно построить Очередь, вам придется создать экземпляр одного из реализующих его классов.Что-то вроде:

Queue linkedList = new LinkedList();

H Это ссылка на учебник по Java на эту тему.

11 голосов
/ 08 марта 2017

enter image description here

Интерфейс очереди расширяет java.util.Collection дополнительными операциями вставки, извлечения и проверки, такими как:

+offer(element: E): логический // Вставка элемента

+poll(): E // Извлекает элемент и возвращает NULL, если очередь пуста

+remove(): E // Извлекает и удаляет элемент и выдает исключение, если очередь пуста

+peek(): E // Извлекает, но не удаляет заголовок этой очереди, возвращая ноль, если эта очередь пуста. +element(): E // Извлекает, но не удаляет заголовок этой очереди, выдает исключение, если очередь пуста.

Пример кода для реализации очереди:

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
6 голосов
/ 09 февраля 2016

Очередь - это интерфейс в Java, вы не можете этого сделать.

Вместо этого у вас есть два варианта:

option1:

Queue<Integer> Q = new LinkedList<>();

option2:

Queue<Integer> Q = new ArrayDeque<>();

Я рекомендую использовать option2, так как он немного быстрее, чем другие

5 голосов
/ 06 июня 2016

Очередь в 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);  
 }
}

Вы также можете реализовать свой собственный пользовательский интерфейс, реализующий интерфейс очереди.

4 голосов
/ 07 марта 2014

Queue - это интерфейс в Java, вы не могли этого сделать.попробуй:

Queue<Integer> Q = new LinkedList<Integer>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...