Java for循环 - 代码效率

时间:2014-01-23 05:31:02

标签: java performance

我有一个10,000个元素的数组,我想循环查找一个特定的数字说'6573'。

示例

 for(int i=0;i<=user.length;i++)
    {
        if(user[i]=="6573")
            System.out.println("Found it!!!");
    }

请您建议一种提高代码性能的方法。

由于

6 个答案:

答案 0 :(得分:2)

  • 使用.equals代替==来比较字符串
  • 找到匹配时中断
  • 他的结束条件必须为i < user.length以阻止ArrayIndexOutOfBoundsException

-

for(int i = 0; i < user.length; i++) {
    if("6573".equals(user[i])) {
        System.out.println("Found it!!!");
        break;
    }
}

请注意,如果数组包含.equals()值,我会将NullPointerException调用反转为阻止null

答案 1 :(得分:2)

如果你需要做一次,那就是它。如果您尝试在该列表中找到多个用户,则可以使用O(1)搜索集:

Set<String> set = new HashSet<>(Arrays.asList(user));
if(set.contains("6573"))
        System.out.println("Found it!!!");

实际上,将用户直接存储在该集合中而不是使用数组可能是有意义的。

答案 2 :(得分:0)

如果数组元素按顺序排序(排序),那么你可以使用二进制搜索..它会提高程序的性能。

答案 3 :(得分:0)

使用sort()对数组进行排序(效率O(n Log n)并使用binary search (O(log n) ) ..我认为这将比您当前的效率更有效,即O(n).。只是提供详细信息@ abhi的答案......

答案 4 :(得分:0)

试试这个

int index = -1;  
boolean found = false;  
for(int i = 0; i < array.length; i++)  
{  
   if(array[i].equalsIgnoreCase(userInput))  
   {  
       index = i;
       found = true;
       break;
   }  
}

答案 5 :(得分:0)

你可以使用multi-threading并制作例如2个指针,一个从数组的开始行进,一个从结束到数组的中间。
它将使用更多的处理但更少的时间。