Стек .add() или .push()???
Чтобы узнать, в чем разница между ними и как они работают, нам нужно взглянуть на классы держателей.
Имейте в виду, что Stack класс расширяет класс Vector класс. Игнорируйте другие классы, если хотите.
Хорошо, предположим, что у нас есть это в основном методе
Stack<Object> s = new Stack<Object>();
пуш();
Он вызывает метод push в классе Stack, который выглядит так…
Затем он вызывает public addElement()
в классе Vector и возвращает элемент, который мы только что отправили. Чтобы иметь возможность сделать это, например…
Object obj = s.push(new Object());
Как видите, он вызывает другой метод в классе Vector.
Если вам интересно, что делает synchronized, он блокирует объект, в данном случае метод, от любых общих ресурсов. Обычно это происходит из-за многопоточности.
Наконец, он увеличивает размер стека и проталкивает элемент.
с.добавить();
Он вызывает add()
в классе стека.
это выглядит знакомо???
Да, это.
Это то же самое, что и addElement()
, который вызывает s.push()
, за исключением того, что он всегда возвращает true.
Затем он вызывает метод add()
в векторном классе . "Изображение 2"
Заключение
s.push()
-› общий addElement()
-› закрытый add()
всегда
но
s.add()
-> общедоступный add()
-> частный add()
Это всего лишь вызов метода... В обоих случаях они приводят к вызову приватного метода .add()
, который добавляет элемент в стек.
Единственная разница между этими вызовами — возвращаемые значения.
s.push()
вернуть объект, который вы отправляете.
s.add()
всегда возвращает true.
Спасибо за чтение