基本的に、仲間は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);
}
誰も私を助けることができますか?
ありがとうございました。
これがJava 8ソリューションです
public static boolean contains(final int[] arr, final int key) {
return Arrays.stream(arr).anyMatch(i -> i == key);
}
単純に ArrayUtils.contains
from Apache Commons Lang library
を使用できます。
public boolean contains(final int[] array, final int key) {
return ArrayUtils.contains(array, key);
}
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>
を使用することはできず、オートボクシングはここでは機能しません。
グアバは、プリミティブ型の追加のメソッドを提供します。その中には、あなたと同じ引数を取るcontainsメソッドがあります。
public boolean contains(final int[] array, final int key) {
return Ints.contains(array, key);
}
同様に、グアババージョンを静的にインポートすることもできます。
グアバプリミティブの説明 を参照してください
別の方法:
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)
です
私はそれが非常に遅いことを知っていますが、Integer[]
の代わりにint[]
を試してください。
配列がint、double、またはlongの場合、これらのIntStream、DoubleStream、またはLongStreamをそれぞれ使用できます
int[] values = { 1, 33, 55, 66 };
int testValue = 33;
boolean contains = IntStream.of(values).anyMatch(x -> x == testValue);
リファレンス- 配列の値を確認する
1.一度限りの使用
List<T> list=Arrays.asList(...)
list.contains(...)
2.複数回使用する場合は、パフォーマンスを考慮してHashSetを使用します。
Set <T>set =new HashSet<T>(Arrays.asList(...));
set.contains(...)
Java.util.Arrays
クラスを使用して、contains
などのメソッドを使用して、T[?]
オブジェクト内の配列List<T>
を変換できます。
Arrays.asList(int[] array).contains(int key);
これはJava 8で機能しました
public static boolean contains(final int[] array, final int key)
{
return Arrays.stream(array).anyMatch(n->n==key);
}
以下のJava 8コードを使用して、プリミティブint配列を整数の配列リストに変換できます。
List<Integer> arrayElementsList = Arrays.stream(yourArray).boxed().collect(Collectors.toList());
次に、contains()
メソッドを使用して、リストに特定の要素が含まれているかどうかを確認します。
boolean containsElement = arrayElementsList.contains(key);
これを試して:
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);
}