Рубрики
Без рубрики

Определение стека char в Java

Узнайте, как создать стек символов на Java.

Автор оригинала: baeldung.

Определение стека char в Java

1. Обзор

В этом учебнике мы обсудим, как создать char стек в Java. Сначала мы увидим, как мы можем сделать это с помощью Java API, а затем мы будем смотреть на некоторые пользовательские реализации.

Стек — это структура данных, которая следует принципу LIFO (Last In First Out). Некоторые из его общих методов:

  • push (E пункт) – толкает элемент в верхней части стека
  • поп() – удаляет и возвращает объект в верхней части стека
  • peek () – возвращает объект в верхней части стека, не удаляя его

2. Стек char используя API Java

Java имеет встроенный API под названием java.util.Stack . С char является примитивным типом данных , которые не могут быть использованы в дженериках, мы должны использовать класс обертки java.lang.Character создать Стек :

Stack charStack = new Stack<>();

Теперь мы можем использовать толкать , поп- , и заглянуть методы с нашими Стек .

С другой стороны, нас могут попросить создать пользовательскую реализацию стека. Поэтому мы будем искать несколько различных подходов.

3. Пользовательская реализация с использованием LinkedList

Давайте реализуем char стек с использованием LinkedList как наша структура данных бэк-энда:

public class CharStack {

    private LinkedList items;

    public CharStack() {
        this.items = new LinkedList();
    }
}

Мы создали предметы переменная, которая инициализируется в конструкторе.

Теперь мы должны обеспечить реализацию толкать , заглянуть , и поп- методика:

public void push(Character item) {
    items.push(item);
}

public Character peek() {
    return items.getFirst();
}

public Character pop() {
    Iterator iter = items.iterator();
    Character item = iter.next();
    if (item != null) {
        iter.remove();
        return item;
    }
    return null;
}

толкать и заглянуть методы используют встроенные методы LinkedList . Для поп- , мы впервые использовали Итератор чтобы проверить, есть ли элемент на вершине или нет. Если он там, мы удаляем элемент из списка, позвонив в удалить метод .

4. Пользовательская реализация с использованием массива

Мы также можем использовать массив для нашей структуры данных:

public class CharStackWithArray {

    private char[] elements;
    private int size;

    public CharStackWithArray() {
        size = 0;
        elements = new char[4];
    }

}

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

Теперь давайте реализуем толкать метод:

public void push(char item) {
    ensureCapacity(size + 1);
    elements[size] = item;
    size++;
}

private void ensureCapacity(int newSize) {
    char newBiggerArray[];
    if (elements.length < newSize) {
        newBiggerArray = new char[elements.length * 2];
        System.arraycopy(elements, 0, newBiggerArray, 0, size);
        elements = newBiggerArray;
    }
}

При нажатии элемента в стек, мы сначала должны проверить, если наш массив имеет возможность хранить его. В этом случае мы создаем новый массив и удваиваем его размер. Затем мы копируют старые элементы в недавно созданный массив и присваиваем его нашему элементы переменная.

Примечание: для объяснения того, почему мы хотим удвоить размер массива, а не просто увеличить размер на один, пожалуйста, обратитесь к этой StackOverflow пост .

Наконец, давайте реализуем заглянуть и поп- методика:

public char peek() {
    if (size == 0) {
        throw new EmptyStackException();
    }
    return elements[size - 1];
}

public char pop() {
    if (size == 0) {
        throw new EmptyStackException();
    }
    return elements[--size];
}

Для обоих методов, после проверки того, что стек не пуст, мы возвращаем элемент в положение размер – 1. Для поп- , В дополнение к возвращению элемента, мы decrement размер на 1.

5. Заключение

В этой статье мы узнали, как сделать char стек с помощью Java API, и мы увидели несколько пользовательских реализации.

Код, представленный в данной статье, доступен более на GitHub .