Java提高循环代码效率
我有一个10000个元素的数组,我想循环查找一个特定的数字,比如“6573” 范例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
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;
}
}