迭代数组 - java

Eli*_*Eli 28 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Phi*_*use 49

从至少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;
}
Run Code Online (Sandbox Code Playgroud)

在Java 8中,您还可以执行以下操作:

// import java.util.stream.IntStream;

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

尽管为此转换为流可能有点过分.

  • java-8版本不正确,Arrays.asList(array)将产生一个带有单个元素的List <int []>,这是不是故意的数组.列表也没有anyMatch方法.查看Arrays.stream或IntStream.of (2认同)

jah*_*roy 11

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

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

此外,如果将逻辑放在方法中并且更改,则只需在一个位置修改代码.

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


Woo*_*Moo 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;  
}  
Run Code Online (Sandbox Code Playgroud)

  • 原帖中的功能有何不同?此外,作为个人要求,大括号对于学习语言的人来说是一件好事. (2认同)

ana*_*ocs 7

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

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

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

ArrayUtils.contains(intArray, valueToFind);
Run Code Online (Sandbox Code Playgroud)

ArrayUtils API