簡體   English   中英

迭代數組 - java

[英]Iterating through array - java

我想知道是否有更好的方法,並將Array傳遞給該方法,或者每當我想檢查數字是否在array時將其寫出來。

例如:

public static boolean inArray(int[] array, int check) {

    for (int i = 0; i < array.length; i++) {
        if (array[i] == check) 
            return true;
    }

    return false;
}

我在這里先向您的幫助表示感謝!

從至少Java 1.5.0(Java 5)開始,代碼可以被清理一下。 Array和任何實現Iterator東西(例如Collection s)可以循環使用:

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

在Java 8中,您還可以執行以下操作:

// import java.util.stream.IntStream;

public static boolean inArray(int[] array, int check) {
   return IntStream.of(array).anyMatch(val -> val == check);
}

盡管為此轉換為流可能有點過分。

您絕對應該將此邏輯封裝到方法中。

多次重復相同的代碼沒有任何好處。

此外,如果將邏輯放在方法中並且更改,則只需在一個位置修改代碼。

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

如果您正在使用數組(並且純粹是數組),則“包含”的查找是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;  
}  

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

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

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

ArrayUtils.contains(intArray, valueToFind);

ArrayUtils API

使用java 8 Stream API可以簡化您的工作。

public static boolean inArray(int[] array, int check) {
    return Stream.of(array).anyMatch(i -> i == check);
}

只是你有從Array創建一個新Stream的開銷,但是這會暴露使用其他Stream API。 在您的情況下,您可能不希望為單行操作創建新方法,除非您希望將其用作實用程序。 希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM