110

基本的に、私の仲間は、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);
}

誰か助けてもらえますか?

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

4

15 に答える 15

73

ArrayUtils.containsApacheCommonsLangライブラリから簡単に使用できます。

public boolean contains(final int[] array, final int key) {     
    return ArrayUtils.contains(array, key);
}
于 2012-08-18T16:50:57.943 に答える
57

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

public static boolean contains(final int[] arr, final int key) {
    return Arrays.stream(arr).anyMatch(i -> i == key);
}
于 2015-12-31T05:52:06.293 に答える
37

It's because Arrays.asList(array) returns List<int[]>. The array argument is treated as one value you want to wrap (you get a list of arrays of ints), not as vararg.

Note that it does work with object types (not primitives):

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

or even:

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

But you cannot have List<int> and autoboxing is not working here.

于 2012-08-18T16:45:55.450 に答える
21

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

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

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

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

于 2013-07-16T16:39:15.953 に答える
19

別の方法:

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)

于 2012-08-18T16:50:00.330 に答える
17

とても遅いことは知っていますが、Integer[]代わりに試してみてくださいint[]

于 2014-12-16T13:13:39.623 に答える
2

1.1回限りの使用

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

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

Set <T>set =new HashSet<T>(Arrays.asList(...));
set.contains(...)
于 2014-08-22T08:54:51.983 に答える
2

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

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

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

boolean containsElement = arrayElementsList.contains(key);
于 2019-05-26T13:15:34.673 に答える
1

これを試して:

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); 
}
于 2018-12-18T13:33:22.963 に答える
0

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

Arrays.asList(int[] array).contains(int key);
于 2014-11-20T04:14:44.387 に答える
0

これはJava8で機能しました

public static boolean contains(final int[] array, final int key)
{
return Arrays.stream(array).anyMatch(n->n==key);
}
于 2016-10-29T19:44:17.767 に答える
0
private static void solutions() {
    int[] A = { 1, 5, 10, 20, 40, 80 };
    int[] B = { 6, 7, 20, 80, 100 };
    int[] C = { 3, 4, 15, 20, 30, 70, 80, 120 };

    List<Integer> aList = Arrays.stream(A).boxed().collect(Collectors.toList());

    List<Integer> cList = Arrays.stream(C).boxed().collect(Collectors.toList());
    String s = "";
    for (Integer a : C) {
        if (aList.contains(a) && cList.contains(a)) {
            s = s.concat(String.valueOf(a)).concat("->");
        }
    }
}
于 2021-06-16T14:48:08.610 に答える
0

Java9以降

public boolean contains(final int[] array, final int key) {
    return List.of(array).contains(key);
}
于 2021-11-19T01:48:25.593 に答える
-1

intの配列の大きさに応じて、コレクションを使用.containsし、一度に1つの要素で配列を反復処理するのではなく、パフォーマンスが大幅に向上します。

import static org.junit.Assert.assertTrue;
import java.util.HashSet;

import org.junit.Before;
import org.junit.Test;

public class IntLookupTest {

int numberOfInts = 500000;
int toFind = 200000;
int[] array;

HashSet<Integer> intSet;

@Before
public void initializeArrayAndSet() {
    array = new int[numberOfInts];
    intSet = new HashSet<Integer>();
    for(int i = 0; i < numberOfInts; i++) {
        array[i] = i;
        intSet.add(i);
    }
}

@Test
public void lookupUsingCollections() {
    assertTrue(intSet.contains(toFind));
}

@Test
public void iterateArray() {
    assertTrue(contains(array, toFind));

}

public boolean contains(final int[] array, final int key) {
    for (final int i : array) {
        if (i == key) {
            return true;
        }
    }
    return false;
}
}
于 2012-08-18T17:18:22.987 に答える
-6

これをやってみてくださいInteger.parseInt().....

public boolean chkInt(final int[] array){
    int key = false;

    for (Integer i : array){


          try{

                   Integer.parseInt(i);
                   key = true;
                   return key;

             }catch(NumberFormatException ex){

                   key = false;

                   return key;

              }


     }
}
于 2012-08-18T17:15:42.123 に答える