Java Stack push()vs add()

时间:2013-04-13 15:17:41

标签: java collections interface stack

我正在尝试使用Stack,但我对术语感到有些困惑。

根据Java doc,我发现Stack类只有push(E e)

add(E e)addAll(Collection<? extends E> c)作为Vector类的继承方法。

它们是否具有相同的功能,或者使用push(...)将元素插入Stack对象更好。

换句话说,如果我使用add(...)代替push(...),我会遇到任何问题吗?

10 个答案:

答案 0 :(得分:16)

  

Kalyanaraman Santhanam:

     

编辑:如果我使用add(...)代替,我会遇到任何问题吗?   推(...)?

明确地说,您不会遇到任何问题,因为addList界面以及Stack的一部分,但您应该注意到代码和您的代码的进一步可读性其他程序员的意图。 push方法会让他们知道他们正在使用Stack对象,他们会明确知道会发生什么。另请注意,push的返回值与add不同(前者具有“推送对象”类型,后者只有boolean响应)

答案 1 :(得分:3)

他们是一样的。

来自JavaDoc

  

将项目推到此堆栈的顶部。这完全一样   效果为:

addElement(item)

答案 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方法