Java集合框架中取出元素时的比较问题:“==“与equals()方法

今天随便刷力扣的时候看到了最小栈,发现力扣上没做过,题不难,于是做了一下Java集合框架中取出元素时的比较问题:“==“与equals()方法_第1张图片
一开始的代码如下:

class MinStack {
    Deque<Integer> stack;
    Deque<Integer> minStack;
    public MinStack() {
        stack = new LinkedList<>();
        minStack = new LinkedList<>();
    }
    
    public void push(int val) {
        stack.push(val);
        if(minStack.isEmpty() || minStack.peek() >= val)
            minStack.push(val);
    }
    
    public void pop() {
        if(stack.peek() == minStack.peek()) 
        minStack.pop();
        stack.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return minStack.peek();
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

很简单的一道题,结果提交时wa了。

Java集合框架中取出元素时的比较问题:“==“与equals()方法_第2张图片
看了一眼题解,区别在于pop函数:

public void pop() {//本人写法
        if(stack.peek() == minStack.peek()) 
        minStack.pop();
        stack.pop();
    }
    public void pop() {//题解写法
    	int t = stack.pop();
        if(t == minStack.peek()) 
        minStack.pop();
    }

乍一看区别不大,区别是两个栈先后问题,不过应该不影响整体代码的执行。
后来想到,题解的写法将栈中元素取出,拆包成int类型而不是包装类Integer类型,若int与Integer比较,则Integer会变成int,在比较数据。
但是本人的写法,有偷懒的嫌疑(,两个栈中取出的是两个Intege类型的r元素,使用"=="比较时比较的是地址而不是内容。
后将其改为equals方法,通过。

public void pop() {
        if(stack.peek().equals(minStack.peek())) 
        minStack.pop();
        stack.pop();
    }

你可能感兴趣的:(java,leetcode)