Java Stack push() vs add()

Я пытаюсь использовать Stack, но я немного смущен терминологией.

Я обнаружил, что класс Stack имеет только push(E e) в соответствии с Java-документом.

И имеет add(E e) и addAll(Collection<? extends E> c) как унаследованный метод из класса Vector.

Имеют ли они ту же функциональность или лучше использовать push(...) для вставки элементов в объект Stack.

Другими словами, будут ли возникать проблемы, если я использую add(...) вместо push(...)?

Ответы

Ответ 1

Кальянараман Сантанам:

Изменить: будут ли возникать проблемы, если я использую add (...) вместо нажать (...)?

Определенно, вы не столкнетесь с какими-либо проблемами, потому что add является частью интерфейса List, а также Stack, но вы должны заметить дальнейшую читаемость вашего кода и ваши намерения в нем другими программистами, push метод даст им понять, что они используют объект Stack, они будут знать, что ожидать от. Также обратите внимание, что push имеет другое возвращаемое значение, чем add (у первого есть тип "pushed object", а последний - только ответ boolean)

Ответ 2

Они одинаковы.

Из JavaDoc:

Вставляет элемент в верхнюю часть этого стека. Это то же самое как:

addElement(item)

Ответ 3

(извините, если мой английский плохой, я из MX).

Теоретически, это то же самое, потому что add - это метод всего родового класса... Но очень рекомендуется использовать push, потому что вы используете стек, и если вы используете "push" вместо "add", может быть, вы поймете немного больше...

Ответ 4

Если вы используете Stack, тогда вы должны использовать push(), поскольку это стандартный способ добавления элементов в стек (из-за идеи структуры данных Stack). Это означает, что "верхняя часть стека" - это элемент, который вы только push() ed.

Вы должны только добавлять и удалять из верхней части Stack, и если вы считаете, что вам понадобятся другие способы добавления данных (добавьте их в середину или конец), я бы посоветовал использовать Stack, поскольку он будет сделать код более понятным.

Изменить: (отражает редактирование вопроса) Как я уже говорил, я бы не ожидал увидеть add(), если бы имел дело с Stack. add() не является стандартным синтаксисом для использования Stack, push() is. Я бы рекомендовал использовать только функции, определенные в основном тексте javadoc, если вам не нужны только те, которые унаследованы.

Ответ 5

Это все о проблемах наследования, если это Stack, вы должны использовать push(), чтобы быть ясным и следовать за моделью. Но, по сути, из спецификации Java SE:

Выталкивает элемент в верхнюю часть этого стека. Это имеет тот же эффект, что и: addElement(item)

Ответ 6

Как все говорили, это имеет тот же эффект с "толчком". Некоторые могут спросить, но почему? Я недавно читал эту тему, и она говорила, что это нарушение принципа "принцип наименьшего удивления". Так что это как недостаток дизайна API, а не главная проблема. Это учит нас, что никакое программное обеспечение, фреймворк, API и т.д. Не являются идеальными, у всего есть свои недостатки.

Ответ 7

Да, я не могу найти большой разницы между методами push() и add() при их использовании. Но предпочел использовать push() при использовании Stack

Ответ 8

То, с чем я недавно столкнулся при попытке задать вопрос кодирования (на самом деле ситуация, которая привела меня к поиску того же вопроса): Мой код превышал лимит времени, когда я использовал stack.add (строковый объект). В то время как это успешно решено, поскольку я изменил .add к .push то есть stack.push (строковый объект). Буквально я ничего не изменил (кроме .add ->.push), и мой код был выполнен вовремя!

Ответ 9

  Из моего анализа я не увидел никакой разницы между выводом методов add и push. Пожалуйста, ознакомьтесь с кодом и выводом ниже.

import java.util.Stack;

public class StackDemo {

    static Stack stack = new Stack();

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        add(10);
        add(20);
        add(30);
        print();
        push(40);
        print();
        pop();
        print();
        push(50);
        print();

    }

    static void print() {
        System.out.println(stack);
    }

    static void add(int item) {
        stack.add(item);
    }

    static void push (int item) {
        stack.push(item);
    }

    static void peek() {
        System.out.println(stack.peek());
    }

    static int pop() {
        return stack.pop();
    }
}
*
[10, 20, 30]
[10, 20, 30, 40]
[10, 20, 30]
[10, 20, 30, 50]
*