web-dev-qa-db-ger.com

Iteration durch Array - Java

Ich habe mich gefragt, ob es besser ist, eine Methode dafür zu haben und die Array an diese Methode zu übergeben oder jedes Mal auszufüllen, wenn ich überprüfen möchte, ob eine Zahl in der array steht. 

Zum Beispiel:

public static boolean inArray(int[] array, int check) {

    for (int i = 0; i < array.length; i++) {
        if (array[i] == check) 
            return true;
    }

    return false;
}

Danke für die Hilfe im Voraus!

25
Eli

Sie sollten diese Logik auf jeden Fall in eine Methode einkapseln.

Es hat keinen Vorteil, identischen Code mehrmals zu wiederholen.

Wenn Sie die Logik in einer Methode platzieren und sich ändern, müssen Sie Ihren Code nur an einer Stelle ändern.

Ob Sie eine Drittanbieter-Bibliothek verwenden möchten oder nicht, ist eine völlig andere Entscheidung.

11
jahroy

Seit mindestens Java 1.5.0 (Java 5) kann der Code etwas aufgeräumt werden. Arrays und alles, was Iterator (z. B. Collections) implementiert, kann als Schleife ausgeführt werden:

public static boolean inArray(int[] array, int check) {
   for (int o : array){
      if (o == check) {
         return true;
      }
   }
   return false;
}

In Java 8 können Sie auch Folgendes tun:

// import Java.util.stream.IntStream;

public static boolean inArray(int[] array, int check) {
   return IntStream.of(array).anyMatch(val -> val == check);
}

Obwohl das Konvertieren in einen Stream dafür wahrscheinlich überflüssig ist.

42

Wenn Sie ein Array (und ein reines Array) verwenden, wird nach O(N) gesucht, da im schlimmsten Fall das gesamte Array durchlaufen werden muss. Wenn das Array nun sortiert ist, können Sie eine binäre Suche verwenden, wodurch sich die Suchzeit mit dem Mehraufwand der Sortierung auf log(N) verringert.

Wenn dies wiederholt aufgerufen wird, platzieren Sie es in einer Funktion: 

private boolean inArray(int[] array, int value)
{  
     for (int i = 0; i < array.length; i++)
     {
        if (array[i] == value) 
        {
            return true;
        }
     }
    return false;  
}  
7
Woot4Moo

Sie können die lib org.Apache.commons.lang.ArrayUtils importieren

Es gibt eine statische Methode, bei der Sie ein int-Array übergeben können und einen Wert, auf den Sie prüfen möchten.

enthält (int [] -Array, int valueToFind) Überprüft, ob der Wert im angegebenen Array liegt.

ArrayUtils.contains(intArray, valueToFind);

ArrayUtils API

6
anataliocs

Die Verwendung der Java 8 Stream API kann Ihre Arbeit vereinfachen.

public static boolean inArray(int[] array, int check) {
    return Stream.of(array).anyMatch(i -> i == check);
}

Es ist nur der Aufwand, eine neue Stream aus Array zu erstellen, aber dies führt dazu, dass andere Stream-API verwendet werden. In Ihrem Fall möchten Sie möglicherweise keine neue Methode für den einzeiligen Betrieb erstellen, es sei denn, Sie möchten dies als Dienstprogramm verwenden Hoffe, das hilft!

1
Nisarg Patil