迭代数组 - java

时间:2013-01-23 21:21:05

标签: java arrays

我想知道为这个方法设置方法是否更好并将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;
}

提前感谢您的帮助!

5 个答案:

答案 0 :(得分:43)

由于至少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);
}

尽管为此转换为流可能有点过头了。

答案 1 :(得分:11)

您绝对应该将此逻辑封装到方法中。

多次重复相同的代码没有任何好处。

此外,如果您将逻辑放在方法中并且更改,您只需要在一个地方修改代码。

您是否想要使用第三方库是一个完全不同的决定。

答案 2 :(得分:7)

如果您正在使用数组(并且纯粹是数组),则“包含”的查找是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;  
}  

答案 3 :(得分:7)

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

有一个静态方法,您可以传入一个int数组和一个值来检查。

包含(int []数组,int valueToFind)           检查值是否在给定数组中。

ArrayUtils.contains(intArray, valueToFind);

ArrayUtils API

答案 4 :(得分:1)

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

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

只是您需要从Stream创建新Array的开销,但这会让您使用其他Stream API。在您的情况下,您可能不希望为单行操作创建新方法,除非您希望将其用作实用程序。 希望这有帮助!