2013-01-23 28 views
15

Mi chiedevo se fosse meglio avere un metodo per questo e passare lo Array a quel metodo o scriverlo ogni volta che voglio verificare se un numero è nello array.Iterating through array - java

Ad esempio:

public static boolean inArray(int[] array, int check) { 
    for (int i = 0; i < array.length; i++){ 
     if (array[i] == check) 
      return true; 
      } 
    return false; 
} 

Grazie per l'aiuto in anticipo!

risposta

7

Si dovrebbe incapsulare questa logica in un metodo.

Non è più utile ripetere più volte il codice identico.

Inoltre, se si inserisce la logica in un metodo e questo cambia, è sufficiente modificare il codice in un unico punto.

Se si desidera utilizzare una libreria di terze parti è una decisione completamente diversa.

6

Se si utilizza un array (e puramente un array), la ricerca di "contiene" è O(N), perché nel peggiore dei casi, è necessario eseguire l'iterazione dell'intero array. Ora se l'array è ordinato puoi usare una ricerca binaria, che riduce il tempo di ricerca a log(N) con il sovraccarico dell'ordinamento.

Se questo è qualcosa che è invocato ripetutamente, metterlo in una funzione:

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

In che modo è diversa la funzione nel post originale? Inoltre, come richiesta personale, le parentesi graffe sono una grande cosa per le persone che imparano la lingua. – JustinKSU

+0

@JustinKSU +1 per il suggerimento di _always_ utilizzare le parentesi per istruzioni if ​​e per cicli. E sì, il codice sopra è identico al codice OPs. – jahroy

+1

@JustinKSU copia/incolla il post dell'OP (ecco perché non c'erano parentesi graffe). Aggiunta la funzione per essere la stessa di quanto non fosse necessario alcun cambiamento ed è servita a rispondere alla domanda in due parti dell'OP. – Woot4Moo

5

è possibile importare i org.apache.commons.lang.ArrayUtils lib

C'è un metodo statico in cui puoi passare in un array int e un valore da verificare.

contiene (int [] array, int valueToFind) Verifica se il valore è nell'array specificato.

ArrayUtils.contains(intArray, valueToFind); 

ArrayUtils API

32

Poiché atleast Java 1.5.0 (Java 5) il codice può essere ripulito un po '. Array s e tutto ciò che implementa Iterator (ad esempio Collection s) può essere avvolto in quanto tale:

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

In Java 8 si può anche fare qualcosa di simile:

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

Anche se la conversione a un flusso di questo è probabilmente eccessivo.