2013-01-23 242 views
15

我想知道是否最好有一個方法,並將Array傳遞給該方法,或者每次我想檢查一個數字是否在array中寫出來。遍歷數組--java

例如:

public static boolean inArray(int[] array, int check) { 
    for (int i = 0; i < array.length; i++){ 
     if (array[i] == check) 
      return true; 
      } 
    return false; 
} 

感謝您的幫助提前!

回答

7

你一定要封裝這個邏輯到一個方法。

多次重複相同的代碼沒有任何好處。另外,如果將邏輯放在方法中並且它發生更改,則只需在一個位置修改代碼即可。

是否要使用第三方庫是一個完全不同的決定。

6

如果您使用的是數組(並且純粹是一個數組),則「contains」的查找是O(N),因爲最壞的情況是,您必須迭代整個數組。現在,如果數組已排序,則可以使用二進制搜索,這樣可以將搜索時間減少到log(N),同時還可以降低排序開銷。

如果是這種東西是重複調用,將其放置在一個函數:

private boolean inArray(int[] array, int value) 
{ 
    for (int i = 0; i < array.length; i++) 
    { 
     if (array[i] == value) 
     { 
      return true; 
     } 
    } 
    return false; 
} 
+2

這與原文中的功能有什麼不同?此外,作爲個人要求,花括號對於學習語言的人來說是一件好事。 – JustinKSU

+0

@JustinKSU +1用於爲if語句和for循環建議_always_使用大括號。是的,上面的代碼與OP代碼相同。 – jahroy

+1

@JustinKSU只是複製/粘貼OP的帖子(這就是爲什麼沒有大括號)。增加了與沒有需要改變相同的功能,它回答了OP的兩部分問題。 – Woot4Moo

5

可以導入的lib org.apache.commons.lang.ArrayUtils

有一個靜態的方法,其中你可以傳入一個int數組和一個值來檢查。

contains(int [] array,int valueToFind) 檢查值是否在給定數組中。

ArrayUtils.contains(intArray, valueToFind); 

ArrayUtils API

32

由於atleast Java 1.5.0(Java 5)的代碼可以清理一下。 Array S與任何實現Iterator(如Collection S)可以循環這樣:

public static boolean inArray(int[] array, int check) { 
    for (int o : array){ 
     if (o == check) { 
     return true; 
     } 
    } 
    return false; 
} 

在Java 8,你也可以這樣做:

public static boolean inArray(int[] array, int check) { 
    return Arrays.asList(array).anyMatch(x -> x == check); 
} 

雖然轉換成流的,這是可能矯枉過正。