Где класс Очереди в Наборах Java?

В соответствии с спецификациями Java переменные экземпляра не переопределяются из суперкласса подклассным классом при его расширении.

Следовательно, переменную в подклассе можно рассматривать только как разделяющую то же имя.

Также, когда конструктор A вызывается во время создания экземпляра B, переменная (intVal) инициализируется и, следовательно, выводится.

22
задан 29 April 2009 в 20:19
поделиться

8 ответов

В документации для Queue перечислены различные реализации, в том числе

Выберите реализацию, которая соответствует вашим потребностям.

7
ответ дан Rob 29 November 2019 в 03:43
поделиться

Нет, класса Queue нет, потому что существует множество различных способов реализации очереди, и вам нужно выбрать тот, который подходит вашему варианту использования. То же самое относится и к любым другим коллекциям в структуре коллекций - например, ArrayList и LinkedList оба реализуют List. Общий шаблон, который является хорошим способом использования наследования объектов:

Интерфейс , например, Queue определяет роль, которую вы хотите, чтобы объект играл;

Подинтерфейсы , например, Deque, дополнительно расширяет или специализирует роль - в этом случае «очередь» или двусторонняя очередь позволяет добавлять и удалять элементы с обоих концов очереди, в отличие от добавления только к задней части и удаления из front;

Классы обеспечивают реализацию того, как объект выполняет роль. Например, ArrayDeque использует изменяемый размер массива для реализации двусторонней очереди, которая имеет различные сильные и слабые стороны по сравнению с LinkedList, в котором используется связанный список.

Чтобы развить идею интерфейса как роли, отметим, что, хотя ArrayDeque реализует Deque, вы можете использовать его как Queue, не беспокоясь об этом, потому что реализация обоих интерфейсов означает, что он может играть обе роли. Точно так же LinkedList может носить шляпу List, Queue или Deque.

По этой причине нормальный (рекомендуемый) способ использовать что-то вроде платформы Collections - это программировать интерфейс , то есть использовать интерфейс при использовании класса, а не самого имени класса. Например, вы могли бы создать объект, подобный этому:

Queue<String> logQueue = new ConcurrentLinkedQueue<String>();
...
logQueue.add("Log message");

Таким образом, вы

  • не привязаны к определенному классу и можете использовать замену вставки при необходимости без необходимости большого изменения кода, и
  • документируют, что вы делаете с классом, называя роль, которую он играет. Общий принцип, с которым это помогает, - это самодокументированный код , который, по сути, позволяет самому коду быть понятным без использования комментариев и т. Д.
3
ответ дан Injektilo 29 November 2019 в 03:43
поделиться

В Javadocs приведен список классов, которые реализуют очередь .

Все известные реализующие классы:

AbstractQueue , ArrayBlockingQueue , ArrayDeque , ConcurrentLinkedQueue , DelayQueue , LinkedBlockingQue , [116047D] Linked Link LinkedList , PriorityBlockingQueue , PriorityQueue , SynchronousQueue

Есть также некоторые подинтерфейсы, которые могут оказаться полезными:

Все известные подинтерфейсы:

BlockingDeque , BlockingQueue , Deque

35
ответ дан 29 November 2019 в 03:43
поделиться

Зависит от ваших приоритетов.

Если производительность - ваша абсолютная характеристика вождения, то непременно используйте самую быструю. Просто убедитесь, что у вас есть полное понимание различий, прежде чем сделать выбор

  • В отличие от serialize () вам необходимо добавить дополнительный параметр, чтобы сохранить символы UTF-8 нетронутыми: json_encode ($ array , JSON_UNESCAPED_UNICODE) (в противном случае он преобразует символы UTF-8 в escape-последовательности Unicode).
  • JSON не будет иметь памяти о том, каким был исходный класс объекта (они всегда восстанавливаются как экземпляры stdClass).
  • Вы не может использовать __ sleep () и __ wakeup () с JSON
  • По умолчанию только открытые свойства сериализуются с JSON. (в PHP> = 5.
10
ответ дан 29 November 2019 в 03:43
поделиться

As well as using the API docs to find "all known implementing classes", there are often other non-public implementation that are nevertheless available through the public API (only without requiring reams of pointless documentation). If you click on "use" you will also find Collections.asLifoQueue (Deque is already a Queue, but it is FIFO rather than a stack).

3
ответ дан 29 November 2019 в 03:43
поделиться
import java.util.Queue;

только что

Enqueue function == Queue_Object.add(input_value);

Dequeue function == Queue_Object.pull();   //return the value and delete it from queue
0
ответ дан CoolBeans 29 November 2019 в 03:43
поделиться

http://java.sun.com/javase/6/docs/api/java/util/Queue.html - см. Раздел «Все известные классы реализации». Существует множество реализаций, которые подходят для разных целей.

2
ответ дан 29 November 2019 в 03:43
поделиться

Хотя ответы звучат пренебрежительно, на самом деле они довольно круты, когда учат вас ловить рыбу. Очередь - это просто способ посмотреть на коллекцию, поэтому многие коллекции могут ее реализовать. Кроме того, вещи, которые действуют как коллекции, но с определенной другой логикой (например, очереди потоков), могут использовать тот же интерфейс.

Знание, где искать javadocs, является большой помощью. Я уверен, что вы смотрели, но просто не думали смотреть на реализации. Живите и учитесь.

Иногда вам также может приходиться прогонять списки подклассов / расширений. Как если бы вы посмотрели на Queue и увидели AbstractQueue, вы, возможно, захотите посмотреть, какие классы реализуют это.

Я избавлюсь от одного из ваших -1 для ya:)

2
ответ дан 29 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: