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

2 つの観察:

  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 に答える