Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Освоение Java ArrayDeque: полное руководство и реализация стека

Java ArrayDeque

Это руководство объясняет класс ArrayDeque, его методы и практические примеры — включая использование в качестве стека.

В Java ArrayDeque реализует структуры данных очередь и дек, основанные на изменяемом массиве.


Интерфейсы, реализуемые ArrayDeque

Класс ArrayDeque реализует следующие интерфейсы:


Создание ArrayDeque

Сначала импортируйте пакет:

import java.util.ArrayDeque;

Создайте типизированный дек:

ArrayDeque<Type> deque = new ArrayDeque<>();

Примеры:

// Дек строк
ArrayDeque<String> animals = new ArrayDeque<>();
// Дек целых чисел
ArrayDeque<Integer> ages = new ArrayDeque<>();

Ключевые методы ArrayDeque

Вставка элементов

1. Использование add(), addFirst(), addLast()

Примечание: Если дек полон, эти методы выбрасывают IllegalStateException.

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.addFirst("Cat");
animals.addLast("Horse");
System.out.println("ArrayDeque: " + animals);

Вывод

ArrayDeque: [Cat, Dog, Horse]

2. Использование offer(), offerFirst(), offerLast()

Примечание: Эти методы возвращают false, если дек полон.

ArrayDeque<String> animals = new ArrayDeque<>();
animals.offer("Dog");
animals.offerFirst("Cat");
animals.offerLast("Horse");
System.out.println("ArrayDeque: " + animals);

Вывод

ArrayDeque: [Cat, Dog, Horse]

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

1. getFirst() и getLast()

Примечание: Выбрасывает NoSuchElementException, если дек пуст.

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("First Element: " + animals.getFirst());
System.out.println("Last Element: " + animals.getLast());

Вывод

ArrayDeque: [Dog, Cat, Horse] First Element: Dog Last Element: Horse

2. peek(), peekFirst(), peekLast()

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("Head Element: " + animals.peek());
System.out.println("First Element: " + animals.peekFirst());
System.out.println("Last Element: " + animals.peekLast());

Вывод

ArrayDeque: [Dog, Cat, Horse] Head Element: Dog First Element: Dog Last Element: Horse

Примечание: Если дек пуст, peek() и друзья возвращают null вместо выбрасывания исключения.

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

1. remove(), removeFirst(), removeLast()

Примечание: Выбрасывает NoSuchElementException, если дек пуст или если remove(o) не находит o.

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Cow");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("Removed Element: " + animals.remove());
System.out.println("New ArrayDeque: " + animals);
System.out.println("Removed First Element: " + animals.removeFirst());
System.out.println("Removed Last Element: " + animals.removeLast());

Вывод

ArrayDeque: [Dog, Cat, Cow, Horse] Removed Element: Dog New ArrayDeque: [Cat, Cow, Horse] Removed First Element: Cat Removed Last Element: Horse

2. poll(), pollFirst(), pollLast()

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Cow");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("Removed Element: " + animals.poll());
System.out.println("New ArrayDeque: " + animals);
System.out.println("Removed First Element: " + animals.pollFirst());
System.out.println("Removed Last Element: " + animals.pollLast());

Вывод

ArrayDeque: [Dog, Cat, Cow, Horse] Removed Element: Dog New ArrayDeque: [Cat, Cow, Horse] Removed First Element: Cat Removed Last Element: Horse

3. clear()

Очищает весь дек.

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
animals.clear();
System.out.println("New ArrayDeque: " + animals);

Вывод

ArrayDeque: [Dog, Cat, Horse] New ArrayDeque: []

Итерация по ArrayDeque

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.print("ArrayDeque: ");
Iterator<String> it = animals.iterator();
while(it.hasNext()) {
    System.out.print(it.next() + ", ");
}
System.out.print("\nArrayDeque in reverse order: ");
Iterator<String> rev = animals.descendingIterator();
while(rev.hasNext()) {
    System.out.print(rev.next() + ", ");
}

Вывод

ArrayDeque: [Dog, Cat, Horse] ArrayDeque in reverse order: [Horse, Cat, Dog]

Другие распространённые методы

МетодОписание
element()Получает, но не удаляет голову.
contains(Object o)Проверяет наличие o; возвращает true, если найдено.
size()Количество элементов в деке.
toArray()Преобразует дек в массив.
clone()Создаёт поверхностную копию дека.

Использование ArrayDeque как стека

Для поведения LIFO ArrayDeque предпочтительнее Stack из-за лучшей производительности и отсутствия накладных расходов устаревшей синхронизации.

Методы в стиле стека:

ArrayDeque<String> stack = new ArrayDeque<>();
stack.push("Dog");
stack.push("Cat");
stack.push("Horse");
System.out.println("Stack: " + stack);
System.out.println("Accessed Element: " + stack.peek());
System.out.println("Removed Element: " + stack.pop());

Вывод

Stack: [Horse, Cat, Dog] Accessed Element: Horse Removed Element: Horse

ArrayDeque против LinkedList

Оба реализуют Deque, но различаются:

java

  1. Освоение операторов Java: типы, синтаксис и практические примеры
  2. Комментарии в Java: типы, использование и лучшие практики
  3. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  4. Освоение строк в Java: создание, методы и лучшие практики
  5. Интерфейсы в Java: концепции, реализация и лучшие практики
  6. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  7. Try-with-resources в Java: автоматическое управление ресурсами
  8. Аннотации в Java: типы, размещение и практические примеры
  9. Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
  10. Понимание Java Vector: использование, особенности и сравнение с ArrayList