English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Управление потоком

Java Массив

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Список (List)

Java Queue (очередь)

Java Map множество

Java Set множество

Java Вход/Выход (I/O)

Java Reader/Writer

Другие темы Java

ArrayDeque Java

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

В Java мы можем использовать класс ArrayDeque для реализации структур данных очереди и двунаправленной очереди с помощью массивов.

Интерфейсы, реализованные ArrayDeque

Реализация этих интерфейсов в классе 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

Класс 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]

Доступ к элементам ArrayDeque

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.

Удаление элементов ArrayDeque

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: []

Итеративное遍ение 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 и возвращает ее.

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 и LinkedList классы

ArrayDeque иJava LinkedListРеализует интерфейс Deque. Однако, между ними есть некоторые различия.

  • LinkedList поддерживает пустые элементы, в то время как ArrayDeque это не поддерживает.

  • Каждый узел списка содержит ссылку на другие узлы. Это причина, по которой LinkedList требует больше места для хранения, чем ArrayDeque.

  • Если нужно реализовать структуру данных очередь или двунаправленная очередь, то ArrayDeque может быть быстрее, чем LinkedList.