我有一个10,000个元素的数组,我想循环查找一个特定的数字说'6573'。
示例
for(int i=0;i<=user.length;i++)
{
if(user[i]=="6573")
System.out.println("Found it!!!");
}
请您建议一种提高代码性能的方法。
由于
答案 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个指针,一个从数组的开始行进,一个从结束到数组的中间。
它将使用更多的处理但更少的时间。