2013-01-23 11 views
15

Ich fragte mich, ob es besser wäre, eine Methode dafür zu haben und die Array zu dieser Methode zu übergeben oder es jedes Mal zu schreiben, wenn ich überprüfen möchte, ob eine Nummer in der array ist.Iterating durch Array - Java

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!

Antwort

7

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

Es gibt keinen Vorteil, den identischen Code mehrmals zu wiederholen.

Wenn Sie die Logik in eine Methode einfügen und sie sich ändert, müssen Sie den Code nur an einer Stelle ändern.

Ob Sie eine 3rd-Party-Bibliothek verwenden möchten, ist eine ganz andere Entscheidung.

6

Wenn Sie ein Array (und ein reines Array) verwenden, lautet die Suche nach "enthält" O(N), da im schlimmsten Fall das gesamte Array iteriert werden muss. Jetzt, wenn das Array sortiert ist, können Sie eine binäre Suche verwenden, die die Suchzeit auf mit dem Overhead der Sortierung reduziert.

Wenn dies etwas, das immer wieder aufgerufen wird, legen Sie sie 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; 
} 
+2

Wie ist das anders als die Funktion in der ursprünglichen Post? Auch, als eine persönliche Anfrage, Klammern sind eine großartige Sache für Leute, die die Sprache lernen. – JustinKSU

+0

@JustinKSU +1 für den Vorschlag, _always_ geschweifte Klammern für if-Anweisungen und for-Schleifen zu verwenden. Und ja, der obige Code ist identisch mit dem OP-Code. – jahroy

+1

@JustinKSU nur kopieren/einfügen des OP-Post (weshalb gab es keine Klammern). Die Funktion wurde so hinzugefügt, dass keine Änderung mehr nötig war. Sie diente dazu, die zweiteilige Frage von OP zu beantworten. – Woot4Moo

5

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

Es ist eine statische Methode, bei der Sie können ein int-Array und einen Wert übergeben, nach dem gesucht werden soll.

enthält (int [] array, int valueToFind) Prüft, ob der Wert im angegebenen Array ist.

ArrayUtils.contains(intArray, valueToFind); 

ArrayUtils API

32

Seit mindestens Java 1.5.0 (Java 5) kann der Code etwas aufgeräumt werden.

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

Sie sehen auch etwas tun kann in Java 8: Array s und alles, was Iterator (zB Collection s) implementiert, kann als solche durchgeschleift werden

public static boolean inArray(int[] array, int check) { 
    return Arrays.asList(array).anyMatch(x -> x == check); 
} 

Obwohl in einen Strom umzuwandeln hierfür ist, wahrscheinlich übertrieben.