Java Stack - 修改堆栈中的最后一个元素

时间:2013-02-12 23:26:48

标签: java stack

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

我目前的解决方案是

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是对堆栈中最后一个元素的引用,它会增加。

3 个答案:

答案 0 :(得分:8)

在Java中,Integer类是 immutable ,这意味着永远不能修改Integer对象。这样:

last += 1;

实际上只是简写:

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

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

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

答案 1 :(得分:2)

last+=1;您将另一个对象分配给last。因此,不会操纵堆栈。

答案 2 :(得分:1)

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

stack.peek().increment();