Назад к вопросам
Junior
71
questionbank

Какую коллекцию в Java реализует дисциплину обслуживания FILO (Last In, First Out)?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

java.util.Stack.

Является подклассом Vector. Основные методы:

  • push(E item): добавляет элемент в вершину стека.
  • pop(): извлекает элемент из вершины стека с его удалением.
  • peek(): возвращает элемент с вершины стека без его удаления.
  • empty(): проверяет, пуст ли стек.
  • search(Object o): возвращает 1-основу индекса первого вхождения элемента.

Пример использования:

import java.util.Stack;

// Создание стека
Stack<String> stack = new Stack<>();

// Добавление элементов (push)
stack.push("Элемент 1");
stack.push("Элемент 2");
stack.push("Элемент 3");

// Проверка вершины (peek)
System.out.println("Вершина стека: " + stack.peek()); // Выведет "Элемент 3"

// Извлечение элементов (pop)
System.out.println("Извлеченный элемент: " + stack.pop()); // Выведет "Элемент 3"
System.out.println("Извлеченный элемент: " + stack.pop()); // Выведет "Элемент 2"

// Проверка на пустоту (empty)
System.out.println("Стек пуст? " + stack.empty()); // Выведет "false"

// Извлечение последнего элемента
System.out.println("Извлеченный элемент: " + stack.pop()); // Выведет "Элемент 1"

// Проверка на пустоту (empty) после извлечения всех элементов
System.out.println("Стек пуст? " + stack.empty()); // Выведет "true"

Обратите внимание, что официальная документация Java рекомендует использовать Deque (например, ArrayDeque) как предпочтительную альтернативу Stack для реализации стека, поскольку Stack является устаревшим классом из более ранних версий Java и не поддерживает интерфейс List в полной мере. Однако Stack все равно реализует дисциплину FILO.

Пример с использованием ArrayDeque в качестве стека:

import java.util.Deque;
import java.util.ArrayDeque;

// Создание Deque для использования как стека
Deque<String> stackDeque = new ArrayDeque<>();

// Добавление элементов (push)
stackDeque.push("Элемент A");
stackDeque.push("Элемент B");
stackDeque.push("Элемент C");

// Проверка вершины (peek)
System.out.println("Вершина стека (Deque): " + stackDeque.peek()); // Выведет "Элемент C"

// Извлечение элементов (pop)
System.out.println("Извлеченный элемент (Deque): " + stackDeque.pop()); // Выведет "Элемент C"
System.out.println("Извлеченный элемент (Deque): " + stackDeque.pop()); // Выведет "Элемент B"

Методы push, pop и peek в Deque эквивалентны соответствующим методам в Stack при использовании его в качестве стека.