Как сделать стек в java
Я читал статью Java, но не нашел никаких различий в объявлении и был смущен. Кто-нибудь может меня перечислить?
без более подробной информации о том, что именно задает вопрос, я собираюсь ответить на название вопроса,
это означает, создать ArrayList of String и Integer объекты. Вы не может использовать int потому что это примитивные типы данных, см. ссылку для списка примитива тип данных.
создать Queue : (использование LinkedList)
то же самое как ArrayList , это объявление означает создание Queue of String и Integer объекты.
обновление:
в ответ на ваш комментарий от другого данного ответа,
я довольно смущен сейчас, почему использую строка. а что делает означает
мы используем String только в качестве чистого примера, но вы можете добавить любой другой объект, но главное в том, что вы используете объект не примитивный тип. Каждый примитивный тип данных имеет свой класс примитивной обертки, см. ссылку для списка класса-оболочки примитивного типа данных.
я опубликовал некоторые ссылки, чтобы объяснить разницу между ними, но вот список примитивных типов
что означает, вы не разрешается делать ArrayList целого типа так:
кроме того, вы можете использовать свои собственные объекты, вот мой Monster объект, который я создал,
здесь у нас есть Monster "объект", но теперь в нашем Main.java класс мы хотим вести учет всех наших Monster это то, что мы создаем, поэтому давайте добавим их в ArrayList
(я помог брату моей подруги с Java-игрой, и он должен был сделать что-то в этом роде, как хорошо, но я надеюсь, что пример был хорошо продемонстрирован)
Класс поддерживает один конструктор по умолчанию Stack (), который используется для создания пустого стека .
Ниже программа показывает несколько основных операций, предоставляемых классом Stack:
// Java-код для реализации стека
// Вставка элемента в верхнюю часть стека
static void stack_push(Stack stack)
for ( int i = 0 ; i 5 ; i++)
// выталкивающий элемент сверху стека
static void stack_pop(Stack stack)
for ( int i = 0 ; i 5 ; i++)
Integer y = (Integer) stack.pop();
// Отображение элемента в верхней части стека
static void stack_peek(Stack stack)
Integer element = (Integer) stack.peek();
System.out.println( "Element on stack top : " + element);
// Поиск элемента в стеке
static void stack_search(Stack stack, int element)
Integer pos = (Integer) stack.search(element);
System.out.println( "Element not found" );
System.out.println( "Element is found at position " + pos);
public static void main (String[] args)
Stack stack = new Stack ();
Методы в классе Stack
- Object push ( Object element ) : помещает элемент на вершину стека.
- Object pop () : удаляет и возвращает верхний элемент стека. Исключение 'EmptyStackException' генерируется, если мы вызываем pop (), когда вызывающий стек пуст.
- Object peek () : возвращает элемент в верхней части стека, но не удаляет его.
- boolean empty () : возвращает true, если на вершине стека ничего нет. Остальное возвращает false.
- int search ( Object element ) : определяет, существует ли объект в стеке. Если элемент найден, он возвращает позицию элемента с вершины стека. Иначе, это возвращает -1.
Эта статья предоставлена Мехаком Нарангом.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Класс Stack является подклассом Vector и реализовывает структуру “крайний на вход – первый на выход”.
Этот класс имеет только один конструктор по умолчанию и все методы класса Vector. Плюс к этому Stack имеет ещё свои 5 методов:
- boolean empty()
Этот метод проверяет, является ли стэк пустым или нет. Если стэк пустой – возвращает true, если нет – false. - Objectpeek()
Этот метод возвращает элемент, который находится на вершине стека. - Object pop()
Этот метод возвращает элемент, который находится на вершине стека и удаляет его. - Object push(Object element)
Этот метод добавляет указанный элемент на вершину стека. - int search(Object element)
Этот метод выполняет поиск указанного элемента в стеке. Если искомый элемент найден – возвращается его “отдалённость” от вершины (порядковый номер). Если элемент не найден – возвращается значение -1.
Для понимания того, как это работает на практике, рассмотрим пример простого приложения.
В результате работы программы мы получим следующий результат:
В этом уроке мы изучили основы класса Stack и рассмотрели простой пример с его использованием.
Какой класс лучше использовать для использования стека в java и почему он лучше?
3 ответа 3
Deque
Для стэка рекомендуется использовать реализации интерфейса Deque . Интерфейс включает методы стэка: push , poll и peek .
Стандартные реализации перечислены в документации, например:
-
— дэк на основе массива; — связный список; — потокобезопасная реализация.
Выбор класса зависит от логики приложения (какие операции выполняются и как часто, как изменяется размер стэка) и потребует оценки производительности.
В документации к ArrayDeque утверждается, что в качестве очереди он, скорее всего, будет быстрее LinkedList :
. This class is likely to be faster than Stack when used as a stack, and faster than LinkedList when used as a queue.
так что, если не требуется доступ из нескольких потоков, разумно будет использовать ArrayDeque по умолчанию.
Методы poll и peek в Deque унаследованы от Queue и работают в последовательности для очереди (FIFO). Для симуляции работы стэка можно использовать вместо них методы pollLast и peekLast .
Queue
Более удобный вариант: с помощью метода Collections.asLifoQueue преобразовать Deque в объект Queue , который ведет себя как стэк (LIFO). В этом случае будут корректно работать все методы и итераторы. Также не будут доступны лишние, не допустимые для стэка операции:
Stack не рекомендуется использовать
Также есть стандартный класс java.util.Stack , но его не рекомендуется использовать. Из документации:
A more complete and consistent set of LIFO stack operations is provided by the Deque interface and its implementations, which should be used in preference to this class. For example: Deque stack = new ArrayDeque ();
Более полный и согласованный набор LIFO операций предоставляется через интерфейс Deque и его реализации, которые должны использоваться вместо этого класса. Например: Deque stack = new ArrayDeque ();
т.е. класс сохранен для обратной совместимости, но вместо него нужно использовать реализации Deque . Это вызвано историческими причинами: в первой версии Java в реализации Stack допущены ошибки, например:
Читайте также: