[英]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);
使用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.