如何进一步优化此代码

时间:2012-06-03 17:32:51

标签: java algorithm

如何进一步优化这段代码。 如果可能的话,请提出我应该记住的内容。

public void funct(String str, int[] arr) {
        String temp = "saved";
        for (int i = 0; i < arr.length; i++) {
            if (str.equals(temp) && arr[i] * 2 > 10) {
                Integer num = new Integer(arr[i]);
                num = num * 2;
                System.out.print(num.toString());
            }
        }
    }

谢谢

4 个答案:

答案 0 :(得分:4)

您的代码没有多大意义,例如并非真正需要strtemp。因此优化它们的第一步是删除它们...也使用int,而不是Integer

public void funct(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > 5) {
                System.out.print(arr[i] * 2);
            }
        }
    }

如果你关心代码简洁:

public void funct(int[] arr) {
    for(int i: arr) {
        if (i > 5) {
            System.out.print(i * 2);
        }
    }
}

答案 1 :(得分:3)

两个观察结果:

  1. 将装箱Integer对象替换为int
  2. 每次循环都会进行相同的str.equals(temp)检查。为什么不在if(str.equals(temp))内完成整个循环?

答案 2 :(得分:0)

请注意,由于溢出,表达式arr[i] * 2 > 10实际上等同于(arr[i] > 5 && arr[i] < 1073741824) || (arr[i] > -2147483643 && arr[i] < -1073741824),这可能不是您想要的,但为了以防万一,建议的arr[i] > 5优化是不是语义保留。

答案 3 :(得分:0)

如果您真的关心字符串比较,那么您的代码可以写成如下。

public void funct(String str, int[] arr)
{
    if (!str.equals("saved"))
        return; //just return if String value is not "saved", reduces the loop execution.
    for(int i: arr) {
        if (i>5)
            System.out.println(""+(i<<1)); //Left shift is faster than multiplication. Concatenation is just for printing as SOP will not print integers directly.
    }
}

希望这有帮助。