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

このロジックは必ずメソッドにカプセル化する必要があります。

同じコードを複数回繰り返してもメリットはありません。

また、ロジックをメソッドに配置してそれが変更された場合、コードを 1 か所変更するだけで済みます。

サードパーティのライブラリを使用するかどうかは、まったく別の決定です。

于 2013-01-23T21:34:10.467 に答える
8

配列 (および純粋な配列) を使用している場合、"contains" のルックアップは です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 に答える