0

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

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

4 回答 4

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);
        }
    }
}
于 2012-06-03T17:38:01.000 回答
3

两个观察:

  1. 将装箱的Integer对象替换为int.
  2. str.equals(temp)每次循环时,您都在做同样的检查。为什么不在里面做整个循环if(str.equals(temp))呢?
于 2012-06-03T17:36:39.933 回答
0

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

于 2012-06-03T18:52:54.170 回答
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.
    }
}

希望这可以帮助。

于 2012-06-03T19:14:34.720 回答