Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java提高循环代码效率_Java_Performance - Fatal编程技术网

Java提高循环代码效率

Java提高循环代码效率,java,performance,Java,Performance,我有一个10000个元素的数组,我想循环查找一个特定的数字,比如“6573” 范例 for(int i=0;i<=user.length;i++) { if(user[i]=="6573") System.out.println("Found it!!!"); } for(int i=0;i 使用.equals而不是=来比较字符串 找到匹配项时中断 结束条件必须为i

我有一个10000个元素的数组,我想循环查找一个特定的数字,比如“6573”

范例

 for(int i=0;i<=user.length;i++)
    {
        if(user[i]=="6573")
            System.out.println("Found it!!!");
    }
for(int i=0;i
  • 使用
    .equals
    而不是
    =
    来比较字符串
  • 找到匹配项时中断
  • 结束条件必须为
    i
    ,以防止
    阵列索引超出边界异常
--

for(int i=0;i
请注意,我反转了
.equals()
调用,以防止数组包含
null
值时出现
NullPointerException

  • 使用
    .equals
    而不是
    =
    来比较字符串
  • 找到匹配项时中断
  • 结束条件必须为
    i
    ,以防止
    阵列索引超出边界异常
--

for(int i=0;i

请注意,如果数组包含
null
值,我反转了
.equals()
调用以防止
NullPointerException

如果数组元素有序(排序),则可以使用二进制搜索。这将提高程序的性能。

如果数组元素有序(排序)然后你可以使用二进制搜索。它将提高你程序的性能。

如果你需要做一次,那就到此为止。如果你试图在该列表中找到多个用户,那么你可以使用一个集合进行O(1)搜索:

Set Set=newhashset(Arrays.asList(user));
if(集合包含(“6573”))
System.out.println(“找到了!!!”;

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

如果您需要执行一次,则仅此而已。如果您尝试在该列表中查找多个用户,则可以使用集合进行O(1)搜索:

Set Set=newhashset(Arrays.asList(user));
if(集合包含(“6573”))
System.out.println(“找到了!!!”;

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

使用
Sort()
(效率
O(n Log n)
二进制搜索(O(Log n))
对数组进行排序。我认为这将比您当前的效率更有效,即
O(n).
。只需提供@abhi答案的详细信息…

使用
Sort()
(效率
O(n Log n)
对数组进行排序,并使用
二进制搜索(O(Log n))
。我认为这将比您当前的效率更有效,即
O(n)。
。只需提供@abhi答案的详细信息…

像这样试试看

int index = -1;  
boolean found = false;  
for(int i = 0; i < array.length; i++)  
{  
   if(array[i].equalsIgnoreCase(userInput))  
   {  
       index = i;
       found = true;
       break;
   }  
}
int索引=-1;
布尔值=false;
for(int i=0;i
像这样试试

int index = -1;  
boolean found = false;  
for(int i = 0; i < array.length; i++)  
{  
   if(array[i].equalsIgnoreCase(userInput))  
   {  
       index = i;
       found = true;
       break;
   }  
}
int索引=-1;
布尔值=false;
for(int i=0;i
您可以使用
多线程
并制作两个指针,一个指针从数组的开始移动,另一个指针从数组的结束移动到数组的中间。

它将使用更多的处理,但时间更短。

您可以使用多线程
并制作两个指针,一个指针从数组的开始移动,另一个指针从数组的结束移动到数组的中间。

它将使用更多的处理,但时间更少。

使用不同的数据结构,或保持数组排序。这不起作用,请改用
i
。请记住索引从
0
开始!这个问题属于您,您永远无法用当前方式找到该元素。始终使用
equals()
方法对于字符串值比较,如果要避免
AIOOBE
,则
for
循环中的条件必须是
i
,最后,如果希望更快地检索,请尝试使用映射(尽管插入将非常耗时)。请使用不同的数据结构,或对数组进行排序。这不起作用,请改用
i
。请记住索引从
0
开始!此问题属于您,您永远无法用当前方式找到该元素。请始终使用
equals()
方法对于字符串值比较,如果要避免
AIOOBE
,则
for
循环中的条件必须是
i
,最后,如果希望更快地检索,请尝试使用映射(尽管插入将非常耗时)。
int index = -1;  
boolean found = false;  
for(int i = 0; i < array.length; i++)  
{  
   if(array[i].equalsIgnoreCase(userInput))  
   {  
       index = i;
       found = true;
       break;
   }  
}