33

我想知道是否最好有一个方法并将其传递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;
}

我在这里先向您的帮助表示感谢!

4

5 回答 5

53

至少从 Java 1.5.0 (Java 5) 开始,代码可以稍微清理一下。Arrays 和任何实现Iterator(例如Collections)的东西都可以这样循环:

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

尽管为此转换为流可能是矫枉过正。

于 2013-01-23T21:37:17.227 回答
12

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

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

此外,如果您将逻辑放在一个方法中并且它发生了变化,您只需要在一个地方修改您的代码。

是否要使用 3rd 方库是一个完全不同的决定。

于 2013-01-23T21:34:10.467 回答
8

如果您使用的是数组(并且纯粹是数组),“包含”的查找是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;  
}  
于 2013-01-23T21:22:43.797 回答
7

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

有一个静态方法,您可以在其中传递一个 int 数组和一个要检查的值。

contains(int[] array, int valueToFind) 检查值是否在给定的数组中。

ArrayUtils.contains(intArray, valueToFind);

ArrayUtils API

于 2013-01-23T21:26:26.863 回答
0

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

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

只是您有创建新Streamfrom的开销Array,但这提供了使用其他StreamAPI 的机会。在您的情况下,您可能不想为单线操作创建新方法,除非您希望将其用作实用程序。希望这可以帮助!

于 2018-04-26T07:19:53.767 回答