我在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是对堆栈中最后一个元素的引用,它会增加。
答案 0 :(得分:8)
在Java中,Integer
类是 immutable ,这意味着永远不能修改Integer
对象。这样:
last += 1;
实际上只是简写:
last = Integer.valueOf(last.intValue() + 1);
也就是说,它实际上创建(或检索)不同的 Integer
实例,其值大于前一个Integer
实例的值。
如果您希望能够修改堆栈顶部的对象,则需要在堆栈中放置可变对象。您可以为此创建自己的IntWrapper
或IntHolder
或MutableInteger
类。 (但我不特别推荐这个。)
答案 1 :(得分:2)
last+=1;
您将另一个对象分配给last
。因此,不会操纵堆栈。
答案 2 :(得分:1)
你需要可变的长对象,例如org.apache.commons.lang3.mutable.MutableLong
或java.util.concurrent.atomic.AtomicLong
。然后你可以修改它
stack.peek().increment();