为什么在函数外部初始化堆栈比在函数内初始化堆栈执行速度更快?

时间:2018-01-07 23:08:42

标签: java performance stack

我正在做一个LeetCode问题,我注意到我在初始化一个堆栈之前执行的代码执行得更快,然后声明一个函数运行得更快:

class Solution {
Stack <Character>myStack = new Stack<Character> ();
public boolean isValid(String s) {
    int sLen=s.length();
    if (sLen%2!=0)
        return false;    
    // Stack <Character>myStack = new Stack<Character> ();
    for(int i=0; i<sLen; i++){
        if ((s.charAt(i)==')')  && !myStack.empty() && (myStack.peek()=='(')) 
            myStack.pop();
        else if (s.charAt(i)==']'  && !myStack.empty() && myStack.peek()=='[')
            myStack.pop();
        else if (s.charAt(i)=='}'  && !myStack.empty() && myStack.peek()=='{')
            myStack.pop();
        else
            myStack.push(s.charAt(i));
    }     
    return myStack.empty();
}}

而不是在布尔函数中声明它:

class Solution {
//Stack <Character>myStack = new Stack<Character> ();
public boolean isValid(String s) {
    int sLen=s.length();
    if (sLen%2!=0)
        return false;    
    Stack <Character>myStack = new Stack<Character> ();
    for(int i=0; i<sLen; i++){
        if ((s.charAt(i)==')')  && !myStack.empty() && (myStack.peek()=='(')) 
            myStack.pop();
        else if (s.charAt(i)==']'  && !myStack.empty() && myStack.peek()=='[')
            myStack.pop();
        else if (s.charAt(i)=='}'  && !myStack.empty() && myStack.peek()=='{')
            myStack.pop();
        else
            myStack.push(s.charAt(i));
    }     
    return myStack.empty();
}}

1 个答案:

答案 0 :(得分:1)

这是因为在第一个代码段中,您初始化了myStack一次,而在第二个代码段中,您在方法内初始化它,因此myStack每次isValid都会初始化调用方法。