我正在尝试使用Stack
,但我对术语感到有些困惑。
根据Java doc,我发现Stack
类只有push(E e)
。
并add(E e)
和addAll(Collection<? extends E> c)
作为Vector
类的继承方法。
它们是否具有相同的功能,或者使用push(...)
将元素插入Stack
对象更好。
换句话说,如果我使用add(...)
代替push(...)
,我会遇到任何问题吗?
答案 0 :(得分:16)
Kalyanaraman Santhanam:
编辑:如果我使用add(...)代替,我会遇到任何问题吗? 推(...)?
明确地说,您不会遇到任何问题,因为add
是List
界面以及Stack
的一部分,但您应该注意到代码和您的代码的进一步可读性其他程序员的意图。 push
方法会让他们知道他们正在使用Stack
对象,他们会明确知道会发生什么。另请注意,push
的返回值与add
不同(前者具有“推送对象”类型,后者只有boolean
响应)
答案 1 :(得分:3)
答案 2 :(得分:3)
(对不起,如果我的英语不好,我来自MX)。
理论上,是同样的事情,因为add是所有泛型类的一个方法...但是非常推荐使用push,因为你使用的是堆栈,如果使用“push”方法而不是“add” ,也许你会理解一点......
答案 3 :(得分:1)
如果您使用的是Stack
,那么您应该使用push()
,因为这是将元素添加到堆栈的标准方法(由于Stack
的数据结构的概念)。这意味着&#34;堆栈顶部&#34;是您push()
编辑的项目。
您应该只在Stack
的顶部添加和删除,如果您认为需要其他方式添加数据(添加到中间或结尾),那么我建议不要使用{{1}因为它会让你的代码更难理解。
编辑:(反映问题编辑)
正如我所提到的,如果我正在处理Stack
,我会不希望看到add()
。 Stack
不是使用add()
的标准语法,Stack
是。我建议只使用push()
主体中定义的函数,除非你特别需要那些继承的函数。
答案 4 :(得分:0)
这完全取决于继承问题,如果它是Stack
,您应该使用push()
清除并遵循模型。但是,事实上来自Java SE规范:
将项目推到此堆栈的顶部。这与以下内容具有完全相同的效果: addElement(item)
答案 5 :(得分:0)
正如大家所说,它与“推”具有相同的效果。有人会问,为什么呢?我最近读了这个主题,它说的是违反“最小惊讶原则”的原则。因此,这就像API的设计缺陷一样,不是主要问题。这告诉我们,没有软件,框架,API等是完美的,一切都有其自身的缺陷。
答案 6 :(得分:0)
是的,我在使用它们时在push()和add()方法之间找不到太多区别,但是首选在使用Stack时使用push()
答案 7 :(得分:0)
我最近在尝试编码问题(实际上是导致我搜索相同问题的情况)时遇到的问题是: 当我使用stack.add(string object)时,我的代码已超过时间限制。 当我成功更改为.push时,它成功解决了 即stack.push(字符串对象)。 从字面上看,我什么都没改变(.add-> .push除外),我的代码及时执行了!
答案 8 :(得分:0)
根据我的分析,我发现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]
*
答案 9 :(得分:0)
唯一的区别是返回类型
System.out.println(stack.push("1"));
Output : 1
System.out.println(stack.add("2"));
Output : true
但是建议对堆栈使用Push方法