我有一個10000個元素的數組,我想循環並找到一個特定的數字'6573'。Java for循環 - 代碼效率
例
for(int i=0;i<=user.length;i++)
{
if(user[i]=="6573")
System.out.println("Found it!!!");
}
能否請您提出一個方法來提高代碼的性能。
感謝
我有一個10000個元素的數組,我想循環並找到一個特定的數字'6573'。Java for循環 - 代碼效率
例
for(int i=0;i<=user.length;i++)
{
if(user[i]=="6573")
System.out.println("Found it!!!");
}
能否請您提出一個方法來提高代碼的性能。
感謝
.equals
代替==
比較字符串i < user.length
防止ArrayIndexOutOfBoundsException
:-
for(int i = 0; i < user.length; i++) {
if("6573".equals(user[i])) {
System.out.println("Found it!!!");
break;
}
}
請注意,如果數組包含null
值,則我將.equals()
調用的值反向以防止NullPointerException
。
如果數組元素是有序的(排序),那麼你可以使用二進制搜索..它會增加你的程序的性能。
如果你需要做一次那麼就是這樣。如果你試圖找到幾個用戶在該列表中,那麼你可以使用O(1)搜索一組:
Set<String> set = new HashSet<>(Arrays.asList(user));
if(set.contains("6573"))
System.out.println("Found it!!!");
它實際上可能是有意義的直接存儲用戶在設置擺在首位,而不是使用數組。
排序使用sort()
(效率O(n Log n)
和陣列使用binary search (O(log n))
。我認爲這將是比你現在efficency即更高效,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;
}
}
你可以使用multi-threading
,使例如兩個指針,從數組的開始和一個形式結束,直到陣列的中間的一個行程。
它將使用MO重新處理但時間更少。
使用不同的數據結構,或保持您的數組排序。 – Yuushi
這不行,用'i
Christian
這個問題屬於[代碼評論](http://codereview.stackexchange.com/) – Baby