首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java尽可能地优化这个函数

java尽可能地优化这个函数
EN

Code Review用户
提问于 2012-06-13 07:38:13
回答 7查看 764关注 0票数 -3

我是java的新手,对java没有更多的了解。请帮助我尽可能地优化它。

代码语言:javascript
复制
public void q1(String str, int[] arr) {
    String local = "findnumber";
    for(int i=0; i<arr.length; i++) {
        if(str.equals(local) && arr[i] * 2 > 10) {
            Integer in = new Integer(arr[i]);
            in = in * 2;
            System.out.print(in.toString());
        }
    }
}
EN

回答 7

Code Review用户

发布于 2012-06-13 07:46:39

如果您的目标是只打印数字,并且不需要它们是整数,则可以使用:

代码语言:javascript
复制
public void q1(String str, int[] arr) {
    if(!"findnumber".equals(str)) return;
    for(int i : arr) {
        if(i > 5) {
            System.out.print(i * 2);
        }
    }
}
票数 6
EN

Code Review用户

发布于 2012-06-13 07:47:20

首先,您应该首先尝试使您的代码具有可读性和可维护性。这是最重要的事情。首先正确地缩进它,并给您的方法和变量提供有意义的名称。

现在,对于性能,有很多东西可以优化,但是它不会有太大的变化,除非这个方法被称为数十亿次:

  • 局部变量应该是常量。
  • str.equals(local)测试应该在循环之外执行一次
  • 您不应该使用Integer,而应该使用int:int in = arr[i] * 2;
  • 乘法不需要计算两次

以下是一个完整的优化版本:

代码语言:javascript
复制
private static final String FIND_NUMBER = "findnumber";

public void q1(String str, int[] arr) {
    if (FIND_NUMBER.equals(str)) {
        for (int i = 0; i < arr.length; i++) {
            int doubleValue = arr[i] * 2;
            if (doubleValue > 10) {
                System.out.print(doubleValue);
            }
        }
    }
}
票数 4
EN

Code Review用户

发布于 2012-06-13 07:41:02

您可以将str.equals(本地)从循环中提取出来。这将保护循环中执行的大多数操作:

代码语言:javascript
复制
public void q1(String str, int[] arr) {
    String local = "findnumber";
    boolean string_matches = str.equals(local);
    for(int i=0; i<arr.length; i++) {
        if(string_matches && arr[i] * 2 > 10) {
            Integer in = new Integer(arr[i]);
            in = in * 2;
            System.out.print(in.toString());
        }
    }
}

如果不匹配,甚至可以返回:

代码语言:javascript
复制
public void q1(String str, int[] arr) {
    String local = "findnumber";
    if (!str.equals(local)) {
      return;
    }
    for(int i=0; i<arr.length; i++) {
        if(arr[i] * 2 > 10) {
            Integer in = new Integer(arr[i]);
            in = in * 2;
            System.out.print(in.toString());
        }
    }
}
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/12551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档