繁体   English   中英

如何删除Java中栈底的元素?

[英]How to Delete elements from the bottom of Stack in Java?

Java,如何删除栈底元素? 我应该使用临时堆栈并将每个元素弹出到其中以反转堆栈然后弹出第一个元素还是将其视为列表会更容易? 我试图从堆栈底部删除前 n/2 个元素,其中 n 是堆栈中元素的数量。 这里我只取 Integer 个值。

java中可以使用Deque,两边都支持插入和删除。 例如

Deque<Integer> deque = new ArrayDeque<>(Arrays.asList(1,2,3,4));
int count = deque.size() / 2;
while (count > 0)
{
  deque.removeLast();
  count--;
}

您可以使用 linkedList 作为 Deque 的实现。 LinkedList和ArrayDeque的区别: https://stackoverflow.com/questions/6163166/why-is-arraydeque-better-than-linkedlist#:~:text=Key%20differences%3A,LinkedList%20but%20not%20in% 20ArrayDeque&text=The%20LinkedList%20implementation%20consumes%20more%20memory%20than%20the%20ArrayDeque

更多详细信息,请访问https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html

根据您描述的用例,我认为您需要不同的数据结构。

我建议您查看双端队列或Deque ,它自 Java 1.6 以来一直是 Java Collections API 的一部分。

这种数据结构有点像 Stack 和 Queue 之间的混合体,允许您向/从任一端添加/删除元素。

您可以分别使用addFirstremoveFirst执行 push 和 pop 的传统 Stack 操作。

要从“堆栈”的尾部或“底部”中删除,正如您所说的那样,您可以使用removeLast

size方法会给你元素的数量。

Java中,如何从栈底删除元素? 我应该使用临时堆栈并将每个元素弹出到其中以反转堆栈然后弹出第一个元素还是将其视为列表会更容易? 我正在尝试从堆栈底部删除前 n/2 个元素,其中 n 是堆栈中的元素数。 这里我只取 Integer 值。

我了解您的问题,最简单的解决方案是使用 remove(int i) function。这需要 int 作为参数,

Stack<Integer> = new Stack<>();
//suppose stack is [1,2,3,4,5,6,7,8]

首先使用 size() 获取堆栈大小。 删除前 n/2 个元素 -

int size = (int) Math.floor(stack.size()/2)

现在,运行一个从 0 到 size 的循环 注意每次堆栈更新时总是删除第一个元素

for(int i = 0; i<size ; i++) {
 stack.remove(0); 
}

打印剩余堆栈

System.out.println(stack) //[5,6,7,8]

我希望这能解决你的疑问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM