【问题标题】:How can I move a value to the bottom of a stack rather than the top?如何将值移动到堆栈的底部而不是顶部?
【发布时间】:2020-11-07 13:14:10
【问题描述】:

(这是使用java.util.Stack

在我的代码中,我得到了一个值,比如说一个字符串 "1",我想把它放在这堆数字的底部。

“4”

“3”

“2”

现在我为 java.util.Stack 提供的方法实际上并没有一种方法,我可以将 "1" 的值发送到底部在这个堆栈中,他们只让我将值推到堆栈的顶部,这对我没有任何好处。

有没有办法可以将“1”发送到此堆栈的底部?

【问题讨论】:

  • 不要为此使用java.util.Stack(或一般情况下)。您所描述的是队列,而不是堆栈。

标签: java stack lifo


【解决方案1】:

你可以这样做。 add 方法允许您将值放在堆栈中的任何位置。但是你基本上颠覆了堆栈的性质。堆栈是 LIFO(后进先出)。如果这是您想要做的,您可能需要重新考虑您的设计。有多种Collection 实现可供您选择。检查 API 并阅读文档,看看哪一个最适合您的需求。

Stack<Integer> stack = new Stack<>();
stack.push(4);
stack.push(3);
stack.push(2);

stack.add(0,1); 

while(!stack.isEmpty()) {
   System.out.println(stack.pop());
}

打印

2
3
4
1

【讨论】:

    【解决方案2】:

    它是一个栈,一个后进先出的数据结构。从根本上说,除非它是空的,否则你不能添加到底部。

    您可能想要使用不同的数据类型,我认为java.util.Deque 会适合您。

    【讨论】:

    • 你根本无法添加到底部,除非它是空的实际上,你可以。见我的answer
    • @WJS,啊,你找到我了!我应该用“根本”代替“简单”吗? :)
    • 也许吧。或者这样做会绕过堆栈的目的。但我很好奇为什么一开始就允许这样做。
    【解决方案3】:

    实际上你做不到。您只能推送和弹出堆栈的顶部元素。如果您希望同时通过顶部和底部访问您的数据结构,您应该使用另一个数据结构。尝试使用 LinkedList 类代替它提供您想要做的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      相关资源
      最近更新 更多