Почему в Java стек является конкретным классом, а очередь - интерфейсом? - PullRequest
5 голосов
/ 04 апреля 2011

Какой из подклассов очереди является «простой обычной» очередью?

Ответы [ 2 ]

5 голосов
/ 04 апреля 2011

(1) java.util.Stack - унаследованный класс от Java 1.0. Это предшествует структуре Коллекций на многие годы, и это, откровенно говоря, пример ужасного дизайна на многих фронтах. Ничего в этом не должно быть. Основная проблема заключается в том, что Stack расширяет Vector, и поскольку все наследование в Java является публичным наследованием, все методы Vector также доступны в Stack. Следовательно, вы можете проверять любую позицию в стеке, добавлять и удалять элементы из середины, очищать ее или выполнять любые другие действия, которые не должны быть частью абстракции стека, без приведения . Сравните это с использованием интерфейсов Queue или Deque, через которые доступны только подходящие для стека методы.

(2) На самом деле не существует такой вещи, как обычная обычная очередь, но LinkedList реализует очередь без какой-либо специальной семантики, так что, возможно, это то, что вам нужно.

0 голосов
/ 04 апреля 2011

Любой из его конкретных подклассов может использоваться как «обычная обычная» очередь. Правда, они могут иметь дополнительную функциональность, но вы можете использовать только методы, объявленные в интерфейсе Queue. Хотя я предполагаю, что вы можете избежать подклассов, чья дополнительная функциональность влияет на порядок очередей (например, PriorityQueue), емкость и т. Д., Если вы хотите "обычный".

...