Java 如何进一步优化此代码

Java 如何进一步优化此代码,java,algorithm,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

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

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());
            }
        }
    }
public void函数(字符串str,int[]arr){
字符串temp=“已保存”;
对于(int i=0;i10){
整数num=新整数(arr[i]);
num=num*2;
System.out.print(num.toString());
}
}
}
谢谢

两个观察结果:

  • 将装箱的
    Integer
    对象替换为
    int
  • 每次通过循环时,您都在执行相同的
    str.equals(temp)
    检查。为什么不在if(str.equals(temp))中执行整个循环

  • 您的代码没有太大意义,例如,
    str
    temp
    实际上并不需要。所以优化它们的第一步是删除它们。。。也可以使用
    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);
                }
            }
        }
    

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

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

    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.
        }
    }
    
    public void函数(字符串str,int[]arr)
    {
    如果(!str.equals(“已保存”))
    return;//如果字符串值未“保存”,则仅返回,以减少循环执行。
    用于(int i:arr){
    如果(i>5)
    
    System.out.println(“+”(这更像是一个问题。如果你想在这里得到一些帮助,请说明你的意图,方法应该做什么,通常的输入是什么,预期的输出是什么。我们喜欢代码,但不喜欢猜测。除此之外,使用
    int num=arr[i];
    而不是生成一个全新的
    整数
    实例。此外,条件中的第一次乘法也不是真的需要。@Slanec:true,修复了,谢谢!if(arr[i]>5)应该足够了。
    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.
        }
    }