1

我在Java中有一堆整数,我想知道是否有其他方法可以将“最后一个推送的项目”增加一个而不先弹出它。

我目前的解决方案是

Stack<Integer> stack = new Stack<Integer>();
stack.push(1);
stack.push(2);   // Increment 2 to 3
Integer last = stack.pop();
stack.push(last+1);

我尝试了以下但不工作

Integer last = stack.peek();
last+=1;

我认为它会起作用,因为 last 是对堆栈中最后一个元素的引用,并且它增加了。

4

3 回答 3

8

在 Java 中,Integer类是不可变的,这意味着Integer永远不能修改对象。这个:

last += 1;

真的只是这个的简写:

last = Integer.valueOf(last.intValue() + 1);

也就是说,它实际上创建(或检索)一个不同 Integer的实例,其值比前一个Integer实例的值大一。

如果您希望能够修改堆栈顶部的对象,则需要将可变对象放在堆栈上。您可以为此创建自己的IntWrapperor IntHolderorMutableInteger类。(但我不特别推荐这个。)

于 2013-02-12T23:30:22.623 回答
2

last+=1;您将另一个对象分配给last. 因此,堆栈没有被操纵。

于 2013-02-12T23:29:05.027 回答
1

为此,您需要可变长对象,例如org.apache.commons.lang3.mutable.MutableLongor java.util.concurrent.atomic.AtomicLong。然后你可以修改它

stack.peek().increment();
于 2013-02-12T23:43:12.400 回答