webentwicklung-frage-antwort-db.com.de

Java, Vereinfachte Prüfung, ob das int-Array int enthält

Im Grunde hat mein Kollege gesagt, dass ich meinen Code verkürzen könnte, indem er auf andere Weise prüft, ob ein int-Array ein int enthält, obwohl er mir nicht sagt, was es ist: P.

Aktuell: 

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

Habe es auch probiert, obwohl es aus irgendeinem Grund immer false zurückgibt.

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

Kann mir jemand helfen?

Vielen Dank.

72
Caleb

Sie können einfach ArrayUtils.contains aus Apache Commons Lang library verwenden.

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

Es liegt daran, dass Arrays.asList(array)List<int[]> zurückgegeben wird. Das array-Argument wird als ein Wert behandelt, den Sie umschließen möchten (Sie erhalten eine Liste von Arrays von Ints), nicht als Vararg.

Beachten Sie, dass es funktioniert mit Objekttypen (nicht Primitiven) arbeitet:

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

oder auch:

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

Sie können jedoch List<int> nicht haben, und Autoboxing funktioniert hier nicht.

29

Guava bietet zusätzliche Methoden für primitive Typen. Darunter eine Methode, die die gleichen Argumente wie Ihre verwendet.

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

Sie können die Guava-Version auch statisch importieren. 

Siehe Guaven-Grundelemente erklärt

17
Evert

Hier ist Java 8-Lösung

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

Ein anderer Weg: 

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

Dadurch wird das übergebene Array geändert. Sie hätten die Möglichkeit, das Array zu kopieren und mit dem ursprünglichen Array zu arbeiten, d. H. int[] sorted = array.clone();
Dies ist jedoch nur ein Beispiel für einen Kurzcode. Die Laufzeit ist O(NlogN), während Ihr Weg O(N) ist.

15
Cratylus

Ich weiß, dass es super spät ist, aber versuche Integer[] anstelle von int[].

12
Willy Wonka

Wenn das Array ein Int, Double oder Long ist, können wir diese IntStream, DoubleStream bzw. LongStream verwenden

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

Referenz- Überprüfen eines Wertes in Array

3
Rameez

1. einseitig verwendet 

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

2. Verwenden Sie HashSet zur Leistungsüberlegung, wenn Sie mehr als einmal verwenden.

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

Sie können die Klasse Java.util.Arrays verwenden, um das Array T[?] in einem List<T>-Objekt mit Methoden wie contains zu transformieren:

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

das funktionierte in Java 8

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

Sie können Ihr primitives int-Array mit folgendem Java 8-Code in eine Array-Liste von Ganzzahlen konvertieren.

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

Verwenden Sie dann die Methode contains(), um zu überprüfen, ob die Liste ein bestimmtes Element enthält.

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

Versuche dies:

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