迭代数组 – 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中,您还可以执行以下操作:

 public static boolean inArray(int[] array, int check) { return Arrays.stream(array).anyMatch(x -> x == 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。 在您的情况下,您可能不希望为单行操作创建新方法,除非您希望将其用作实用程序。 希望这可以帮助!