English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В данном руководстве мы будем изучать класс ArrayDeque и его методы с помощью примеров. Кроме того, мы также изучим, как использовать ArrayDeque для реализации стека.
В Java мы можем использовать класс ArrayDeque для реализации структур данных очереди и двунаправленной очереди с помощью массивов.
Реализация этих интерфейсов в классе ArrayDeque:
Для создания ArrayDeque двусторонний список我们必须 импортировать пакет java.util.ArrayDeque.
Вот методы, с помощью которых мы можем создать ArrayDeque двусторонний список на Java:
ArrayDeque<Type> animal = new ArrayDeque<>();
В данном случае Type представляет тип для ArrayDeque двустороннего списка. Например,
// создание ArrayDeque для типа String ArrayDeque<String> animals = new ArrayDeque<>(); // создание ArrayDeque для типа Integer ArrayDeque<Integer> age = new ArrayDeque<>();
Класс ArrayDeque предоставляет все методы, существующие в интерфейсах Queue и Deque.
1. Использование add(), addFirst() и addLast() для добавления элементов
add() - вставка указанного элемента в конец ArrayDeque двустороннего списка
addFirst() - вставка указанного элемента в начало ArrayDeque двустороннего списка
addLast() - вставка указанного содержимого в конец ArrayDeque двустороннего списка (эквивалентно add())
Примечание:Если ArrayDeque двусторонний список заполнен, все эти методы add(), addFirst() и addLast() вызывают IllegalStateException.
Например:
import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> animals= new ArrayDeque<>(); // использовать add () animals.add("Dog"); // использовать addFirst () animals.addFirst("Cat"); // использовать addLast() animals.addLast("Horse"); System.out.println("ArrayDeque: " + animals); } }
Результат вывода
ArrayDeque: [Cat, Dog, Horse]
2. Использование offer(), offerFirst() и offerLast() для вставки элементов
offer() - вставка указанного элемента в конец ArrayDeque двустороннего списка
offerFirst() - вставка указанного элемента в начало ArrayDeque двустороннего списка
offerLast() - вставка указанного элемента в конец ArrayDeque двустороннего списка
Примечание: offer(), offerFirst() и offerLast() возвращают true, если успешное insertion элемента; в противном случае, возвращается. Если ArrayDeque двусторонний список заполнен, эти методы возвращают false.
Например:
import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> animals= new ArrayDeque<>(); // использовать offer() animals.offer("Dog"); // Использование offerFirst() animals.offerFirst("Cat"); // Использование offerLast() animals.offerLast("Horse"); System.out.println("ArrayDeque: " + animals); } }
Результат вывода
ArrayDeque: [Cat, Dog, Horse]
1. Использование методов getFirst() и getLast() для доступа к элементам
getFirst() - возвращает первый элемент двунаправленной очереди ArrayDeque
getLast() - возвращает последний элемент двунаправленной очереди ArrayDeque
Примечание:Если двунаправленная очередь ArrayDeque пуста, методы getFirst() и getLast() выбрасывают NoSuchElementException.
Например:
import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> animals= new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); // Получение первого элемента String firstElement = animals.getFirst(); System.out.println("Первый элемент: " + firstElement); // Получение последнего элемента String lastElement = animals.getLast(); System.out.println("Последний элемент: " + lastElement); } }
Результат вывода
ArrayDeque: [Dog, Cat, Horse] Первый элемент: Dog Последний элемент: Horse
2. Использование методов peek(), peekFirst() и peekLast() для доступа к элементам
peek() - возвращает первый элемент двунаправленной очереди ArrayDeque
peekFirst() - возвращает первый элемент двунаправленной очереди ArrayDeque (эквивалентно peek())
peekLast() - возвращает последний элемент двунаправленной очереди ArrayDeque
Например:
import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> animals= new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); // Использование peek() String element = animals.peek(); System.out.println("Элемент в голове: " + element); // Использование peekFirst() String firstElement = animals.peekFirst(); System.out.println("Первый элемент: " + firstElement); // Использование peekLast String lastElement = animals.peekLast(); System.out.println("Последний элемент: " + lastElement); } }
Результат вывода
ArrayDeque: [Dog, Cat, Horse] Head Element: Dog Первый элемент: Dog Последний элемент: Horse
Примечание:Если ArrayDeque двунаправленная очередь пуста, методы peek(), peekFirst() и getLast() выбрасывают NoSuchElementException.
1. Использование методов remove(), removeFirst() и removeLast() для удаления элементов
remove() - возвращает и удаляет один элемент из начала ArrayDeque двусторонней очереди
remove(element) - возвращает и удаляет указанный элемент из начала ArrayDeque двусторонней очереди
removeFirst() - возвращает и удаляет первый элемент из ArrayDeque двусторонней очереди (эквивалентно remove())
removeLast() - возвращает и удаляет последний элемент из ArrayDeque двусторонней очереди
Примечание:Если двусторонняя очередь массива пуста, то методы remove(), removeFirst() и removeLast() вызывают исключение. Кроме того, если элемент не найден, remove(element) вызывает исключение.
Например:
import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> animals= new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); //Использование remove() String element = animals.remove(); System.out.println("Удаление элемента: " + element); System.out.println("Новый ArrayDeque: " + animals); //Использование removeFirst() String firstElement = animals.removeFirst(); System.out.println("Удаление первого элемента: " + firstElement); //Использование removeLast() String lastElement = animals.removeLast(); System.out.println("Удаление последнего элемента: " + lastElement); } }
Результат вывода
ArrayDeque: [Dog, Cat, Cow, Horse] Удаление элемента: Dog Новый ArrayDeque: [Cat, Cow, Horse] Удаление первого элемента: Cat Удаление последнего элемента: Horse
2. Использование методов poll(), pollFirst() и pollLast() для удаления элементов
poll() - возвращает и удаляет первый элемент ArrayDeque двусторонней очереди
pollFirst() - возвращает и удаляет первый элемент ArrayDeque двусторонней очереди (эквивалентно poll())
pollLast() - возвращает и удаляет последний элемент ArrayDeque двусторонней очереди
Примечание:Если ArrayDeque двусторонняя очередь пуста, то если элемент не найден, poll(), pollFirst() и pollLast() возвращают null.
Например:
import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> animals= new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); //Использование poll() String element = animals.poll(); System.out.println("Удаление элемента: " + element); System.out.println("Новый ArrayDeque: " + animals); //Использование pollFirst() String firstElement = animals.pollFirst(); System.out.println("Удаление первого элемента: " + firstElement); //Использование pollLast() String lastElement = animals.pollLast(); System.out.println("Удаление последнего элемента: " + lastElement); } }
Результат вывода
ArrayDeque: [Dog, Cat, Cow, Horse] Удаление элемента: Dog Новый ArrayDeque: [Cat, Cow, Horse] Удаление первого элемента: Cat Удаление последнего элемента: Horse
3. Удаление элементов: использование метода clear()
Чтобы удалить все элементы из ArrayDeque двусторонней очереди, мы используем метод clear(). Например,
import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> animals= new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); //Использование clear() animals.clear(); System.out.println("Новый ArrayDeque: " + animals); } }
Результат вывода
ArrayDeque: [Dog, Cat, Horse] Новый ArrayDeque: []
iterator() - возвращает迭代атор, который можно использовать для遍ения ArrayDeque двусторонней очереди
descendingIterator() - возвращает迭代атор, который можно использовать для遍ения ArrayDeque двусторонней очереди в обратном порядке
Чтобы использовать эти методы,我们必须导入java.util.Iterator пакет. Например,
import java.util.ArrayDeque; import java.util.Iterator; class Main { public static void main(String[] args) { ArrayDeque<String> animals= new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.print("ArrayDeque: "); //Использование iterator() Iterator<String> iterate = animals.iterator(); while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } System.out.print("\nОбратный ArrayDeque: "); //Использование descendingIterator() Iterator<String> desIterate = animals.descendingIterator(); while(desIterate.hasNext()) { System.out.print(desIterate.next()); System.out.print(", "); } } }
Результат вывода
ArrayDeque: [Dog, Cat, Horse] Обратная ArrayDeque: [Horse, Cat, Dog]
Методы | Описание содержимого |
---|---|
element() | Возвращает элемент с начала двойной очереди ArrayDeque. |
contains(element) | Ищет указанный элемент в двойной очереди ArrayDeque. Возвращает true, если элемент найден,否则 false. |
size() | Возвращает размер двойной очереди ArrayDeque. |
toArray() | Преобразует двойную очередь ArrayDeque в массив и возвращает его. |
clone() | Создает копию двойной очереди ArrayDeque и возвращает ее. |
Чтобы реализовать в JavaLIFO (последним вошел, первым вышел)Стек, рекомендуется использовать вКласс StackИспользование двойной очереди. Этот ArrayDeque быстрее, чем класс Stack.
ArrayDeque предоставляет следующие методы, которые можно использовать для реализации стека.
push() - добавляет элемент на вершину стека
peek() - возвращает элемент с верха стека
pop() - возвращает и удаляет элемент с верха стека
Например:
import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> stack = new ArrayDeque<>(); //Добавление элемента в стек stack.push("Dog"); stack.push("Cat"); stack.push("Horse"); System.out.println("Стек: " + stack); //Доступ к элементу с верха стека String element = stack.peek(); System.out.println("Доступный элемент: " + element); //Удалить элемент с вершины стека String remElement = stack.pop(); System.out.println("Удалить element: " + remElement); } }
Результат вывода
Стек: [Horse, Cat, Dog] Доступ к элементу: Horse Удалить элемент: Horse
ArrayDeque иJava LinkedListРеализует интерфейс Deque. Однако, между ними есть некоторые различия.
LinkedList поддерживает пустые элементы, в то время как ArrayDeque это не поддерживает.
Каждый узел списка содержит ссылку на другие узлы. Это причина, по которой LinkedList требует больше места для хранения, чем ArrayDeque.
Если нужно реализовать структуру данных очередь или двунаправленная очередь, то ArrayDeque может быть быстрее, чем LinkedList.