33

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

我发现Stack该类仅push(E e)根据 Java 文档。

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

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

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

4

10 回答 10

26

Kalyanaraman Santhanam:

编辑:如果我使用 add(...) 而不是 push(...),我会遇到任何问题吗?

当然,您不会遇到任何问题,因为add它是List接口的一部分,也是Stack. push方法会给他们一个线索,表明他们正在使用该Stack对象,他们将确切地知道会发生什么。另请注意,push返回值不同于add(前者具有“推送对象”类型,后者只是boolean响应)

于 2013-04-13T16:20:08.050 回答
3

(对不起,如果我的英语不好,我来自 MX)。

从理论上讲,是一样的,因为 add 是所有泛型类的方法...但是非常推荐使用 push,因为您使用的是堆栈,如果您使用“push”方法而不是“add”,也许你会明白一点...

于 2013-12-01T20:49:07.983 回答
3

他们是一样的。

JavaDoc

将一个项目推入此堆栈的顶部。这与以下效果完全相同:

addElement(item)
于 2013-04-13T15:21:09.367 回答
2

唯一的区别是返回类型

System.out.println(stack.push("1"));

Output : 1

System.out.println(stack.add("2"));

Output : true

但是建议对 Stack 使用 Push 方法

于 2019-10-24T02:56:11.400 回答
1

如果您使用的是 aStack那么您应该使用push(),因为这是将元素添加到堆栈中的标准方法(由于 a 的数据结构的想法Stack)。这意味着“堆栈顶部”是您刚刚push()编辑的项目。

您应该只在 a 的顶部添加和删除Stack,如果您认为需要其他方式来添加数据(添加到中间或末尾),那么我建议您不要使用 a Stack,因为它会使您的代码更难理解。

编辑:(反映问题编辑)正如我所提到的,我希望看到add()我是否正在处理Stack. add()不是使用 a 的标准语法Stackpush()是。我建议只使用在主体中定义的函数,javadoc除非你特别需要那些被继承的函数。

于 2013-04-13T15:24:59.507 回答
0

这完全是关于继承问题,如果它是一个Stack你应该使用push()清楚并遵循模型。但是,实际上来自 Java SE 规范:

将一个项目推入此堆栈的顶部。这与以下效果完全相同:addElement(item)

于 2013-04-13T15:23:09.590 回答
0

根据我的分析,我看不出 add 和 push 方法的输出之间没有区别。请参考下面的代码和输出..

导入 java.util.Stack;

公共类 StackDemo {

    静态堆栈堆栈=新堆栈();

    公共静态无效主要(字符串[]参数){
        // TODO 自动生成的方法存根

        添加(10);
        添加(20);
        添加(30);
        打印();
        推(40);
        打印();
        流行音乐();
        打印();
        推(50);
        打印();

    }

    静态无效打印(){
        System.out.println(stack);
    }

    静态无效添加(int item){
        stack.add(项目);
    }

    静态无效推送(int item){
        stack.push(项目);
    }

    静态无效窥视(){
        System.out.println(stack.peek());
    }

    静态 int pop() {
        返回栈.pop();
    }
}
*
[10, 20, 30]
[10, 20, 30, 40]
[10, 20, 30]
[10, 20, 30, 50]
*
于 2019-07-27T13:30:02.877 回答
0

是的,我在使用它们时找不到 push() 和 add() 方法之间的太大区别。但在使用 Stack 时更喜欢使用 push()

于 2018-08-29T07:34:59.810 回答
0

我最近在尝试编码问题时遇到的(实际上是导致我搜索相同问题的情况)是:当我使用 stack.add(string object) 时,我的代码超出了时间限制。当我将 .add 更改为 .push 即 stack.push(string object) 时,它成功解决了。从字面上看,我没有改变任何其他内容(除了 .add -> .push),并且我的代码及时执行!

于 2019-06-02T17:50:27.560 回答
0

正如大家所说,它与“推”具有相同的效果。有人可能会问,但为什么呢?我最近读了这个主题,它说它违反了“最小惊讶原则”的原则。所以这就像 API 的设计缺陷,而不是大问题。这告诉我们,没有任何软件、框架、API 等是完美的,一切都有自己的缺陷。

于 2018-07-20T18:39:41.357 回答