ArrayDeque
Быстрая двусторонняя очередь на массиве — замена `Stack` и `LinkedList`.
Доступно с: Java 1.6
Синтаксис
public class ArrayDeque<E> implements Deque<E>Примеры
Как очередь:
void main() {
Queue<String> queue = new ArrayDeque<>();
queue.offer("a");
queue.offer("b");
IO.println(queue.poll() + " " + queue.poll());
}Результат:
a bКак стек — проверка скобок:
boolean balanced(String s) {
Deque<Character> stack = new ArrayDeque<>();
for (char c : s.toCharArray()) {
if (c == '(') stack.push(c);
else if (c == ')') {
if (stack.isEmpty()) return false;
stack.pop();
}
}
return stack.isEmpty();
}
void main() {
IO.println(balanced("(a(b)c)"));
IO.println(balanced("(()"));
}Результат:
true
falseПримечания
Работает быстрее LinkedList и устаревшего класса Stack. Не принимает null (NullPointerException) и не потокобезопасна; для потоков есть ConcurrentLinkedDeque и LinkedBlockingDeque.
См. также
- Deque — Двусторонняя очередь: добавлять и забирать можно с обоих концов.
- Queue — Очередь: элементы добавляются в конец и забираются из начала.
- Deque.push() — Кладёт элемент на вершину стека (в начало двусторонней очереди).
- LinkedList — Двусвязный список: реализует и `List`, и `Deque`.
- PriorityQueue — Очередь, которая всегда выдаёт наименьший (или самый приоритетный) элемент.
Вопросы и ответы по теме
В учебнике
- Очереди и деки — Очереди в Java: Queue и ArrayDeque, стек на основе Deque, методы offer, poll и peek, очередь с приоритетом PriorityQueue.