2014-01-23 133 views
0

我有一個10000個元素的數組,我想循環並找到一個特定的數字'6573'。Java for循環 - 代碼效率

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

能否請您提出一個方法來提高代碼的性能。

感謝

+2

使用不同的數據結構,或保持您的數組排序。 – Yuushi

+3

這不行,用'i Christian

+1

這個問題屬於[代碼評論](http://codereview.stackexchange.com/) – Baby

回答

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; 
    } 
} 

請注意,如果數組包含null值,則我將.equals()調用的值反向以防止NullPointerException

0

如果數組元素是有序的(排序),那麼你可以使用二進制搜索..它會增加你的程序的性能。

2

如果你需要做一次那麼就是這樣。如果你試圖找到幾個用戶在該列表中,那麼你可以使用O(1)搜索一組:

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

它實際上可能是有意義的直接存儲用戶在設置擺在首位,而不是使用數組。

0

排序使用sort()(效率O(n Log n)和陣列使用binary search (O(log n))。我認爲這將是比你現在efficency即更高效,O(n).。只是給@ ABHI的答案的詳細信息...

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; 
    } 
} 
0

你可以使用multi-threading,使例如兩個指針,從數組的開始和一個形式結束,直到陣列的中間的一個行程。
它將使用MO重新處理但時間更少。