Java堆栈函数衍射
我在这里试图解决一个轻编码问题: 但我不知道为什么下面的代码不相同:Java堆栈函数衍射,java,stack,Java,Stack,我在这里试图解决一个轻编码问题: 但我不知道为什么下面的代码不相同: public void pop() { // if (!minStack.isEmpty() && minStack.peek() == stack.peek()){ // minStack.pop(); // } // stack.pop(); int x = stack.pop(); if (!minStack.isEmpty() &&
public void pop() {
// if (!minStack.isEmpty() && minStack.peek() == stack.peek()){
// minStack.pop();
// }
// stack.pop();
int x = stack.pop();
if (!minStack.isEmpty() && x == minStack.peek()) {
minStack.pop();
}
}
当我使用注释代码时,它出错了。为什么呢
非常感谢你 如果您有一堆基本体,这两个基本体都应该可以工作,因为您将使用
==
来比较内容
我假设您有类型为
Integer
的堆栈,在这种情况下,=
检查引用相等,而您应该检查值相等。使用.equals() 第一个区别是,如果stack
为空,而minStack
也为空,该怎么办?那么这两段代码显然不是做同一件事的…@JonSkeet如果stack
和minStack
都是空的,这会不会导致两个块都调用stack.pop()
并抛出异常?@DarthAndroid:我现在很困惑。。。让我再试一次:)啊-除了别的以外,stack
和minStack
的类型是什么?如果它们是Stack
,那么x==minStack.peek()
和minStack.peek()==Stack.peek()
之间就有区别,前者比较int
值,而后者比较引用。它们是精确堆叠的。我刚刚写了一篇不依赖于使用两个堆栈的文章。我认为这是一个更干净的选择。