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]
*