web-dev-qa-db-ja.com

Java、int配列にintが含まれているかどうかの簡易チェック

基本的に、仲間はint配列にintが含まれているかどうかを確認する別の方法を使用してコードを短くできると言っていましたが、彼はそれが何であるかを教えてくれません:P.

現在:

public boolean contains(final int[] array, final int key) {
    for (final int i : array) {
        if (i == key) {
            return true;
        }
    }
    return false;
}

何らかの理由で常にfalseを返しますが、これも試しました。

public boolean contains(final int[] array, final int key) {
    return Arrays.asList(array).contains(key);
}

誰も私を助けることができますか?

ありがとうございました。

77
Caleb

これがJava 8ソリューションです

public static boolean contains(final int[] arr, final int key) {
    return Arrays.stream(arr).anyMatch(i -> i == key);
}
20
TriCore

単純に ArrayUtils.contains from Apache Commons Lang libraryを使用できます。

public boolean contains(final int[] array, final int key) {     
    return ArrayUtils.contains(array, key);
}
55
Reimeus

Arrays.asList(array)List<int[]>を返すためです。 array引数は、varargとしてではなく、ラップしたい1つの値として扱われます(intの配列のリストを取得します)。

doesオブジェクトタイプ(プリミティブではない)で動作することに注意してください。

public boolean contains(final String[] array, final String key) {
    return Arrays.asList(array).contains(key);
}

あるいは:

public <T>  boolean contains(final T[] array, final T key) {
    return Arrays.asList(array).contains(key);
}

ただし、List<int>を使用することはできず、オートボクシングはここでは機能しません。

31

グアバは、プリミティブ型の追加のメソッドを提供します。その中には、あなたと同じ引数を取るcontainsメソッドがあります。

public boolean contains(final int[] array, final int key) {
    return Ints.contains(array, key);
}

同様に、グアババージョンを静的にインポートすることもできます。

グアバプリミティブの説明 を参照してください

17
Evert

別の方法:

public boolean contains(final int[] array, final int key) {  
     Arrays.sort(array);  
     return Arrays.binarySearch(array, key) >= 0;  
}  

これにより、渡された配列が変更されます。配列をコピーして元の配列、つまりint[] sorted = array.clone();で作業するオプションがあります
しかし、これは単なる短いコードの例です。ランタイムはO(NlogN)で、あなたのやり方はO(N)です

15
Cratylus

私はそれが非常に遅いことを知っていますが、Integer[]の代わりにint[]を試してください。

14
Willy Wonka

配列がint、double、またはlongの場合、これらのIntStream、DoubleStream、またはLongStreamをそれぞれ使用できます

int[] values = { 1, 33, 55, 66 };
int testValue = 33;
boolean contains = IntStream.of(values).anyMatch(x -> x == testValue);

リファレンス- 配列の値を確認する

3
Rameez

1.一度限りの使用

List<T> list=Arrays.asList(...)
list.contains(...)

2.複数回使用する場合は、パフォーマンスを考慮してHashSetを使用します。

Set <T>set =new HashSet<T>(Arrays.asList(...));
set.contains(...)
1
Jaskey

Java.util.Arraysクラスを使用して、containsなどのメソッドを使用して、T[?]オブジェクト内の配列List<T>を変換できます。

Arrays.asList(int[] array).contains(int key);
0

これはJava 8で機能しました

public static boolean contains(final int[] array, final int key)
{
return Arrays.stream(array).anyMatch(n->n==key);
}
0
Farhad Baghirov

以下のJava 8コードを使用して、プリミティブint配列を整数の配列リストに変換できます。

List<Integer> arrayElementsList = Arrays.stream(yourArray).boxed().collect(Collectors.toList());

次に、contains()メソッドを使用して、リストに特定の要素が含まれているかどうかを確認します。

boolean containsElement = arrayElementsList.contains(key);
0
Hetal Rachh

これを試して:

public static void arrayContains(){
    int myArray[]={2,2,5,4,8};

    int length=myArray.length;

    int toFind = 5;
    boolean found = false;

    for(int i = 0; i < length; i++) {
        if(myArray[i]==toFind) {
            found=true;
        }
    }

    System.out.println(myArray.length);
    System.out.println(found); 
}
0
Elavarasan S