web-dev-qa-db-fra.com

Itération dans un tableau - java

Je me demandais s'il valait mieux avoir une méthode pour cela et passer la Array à cette méthode ou l'écrire à chaque fois que je veux vérifier si un nombre est dans la array

Par exemple:

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

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

    return false;
}

Merci pour l'aide à l'avance!

25
Eli

Vous devez absolument encapsuler cette logique dans une méthode.

Il n’ya aucun avantage à répéter le même code plusieurs fois.

De plus, si vous placez la logique dans une méthode et que celle-ci change, il vous suffit de modifier votre code en un seul endroit.

Que vous souhaitiez ou non utiliser une bibliothèque tierce est une décision totalement différente.

11
jahroy

Depuis au moins Java 1.5.0 (Java 5), ​​le code peut être nettoyé un peu. Arrays et tout ce qui implémente Iterator (par exemple Collections) peuvent être bouclés comme suit

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

En Java 8, vous pouvez également faire quelque chose comme:

// import Java.util.stream.IntStream;

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

Bien que la conversion en un flux pour cela soit probablement excessive.

42
Philip Whitehouse

Si vous utilisez un tableau (et uniquement un tableau), la recherche de "contient" est O(N), car dans le pire des cas, vous devez itérer le tableau entier. Maintenant, si le tableau est trié, vous pouvez utiliser une recherche binaire, ce qui réduit le temps de recherche à log(N) avec le temps système du tri.

Si ceci est invoqué à plusieurs reprises, placez-le dans une fonction: 

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

Vous pouvez importer la lib org.Apache.commons.lang.ArrayUtils

Il existe une méthode statique dans laquelle vous pouvez passer un tableau int et une valeur à vérifier.

contient (int [] tableau, int valueToFind) Vérifie si la valeur est dans le tableau donné.

ArrayUtils.contains(intArray, valueToFind);

API ArrayUtils

6
anataliocs

L'utilisation de l'API Java 8 Stream pourrait simplifier votre travail.

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

C'est juste que vous avez la surcharge de créer une nouvelle Stream à partir de Array, mais cela donne la possibilité d'utiliser d'autres API Stream. Dans votre cas, vous ne voudrez peut-être pas créer une nouvelle méthode pour une opération sur une ligne, à moins que vous ne souhaitiez l'utiliser comme utilitaire . J'espère que cela vous aidera!

1
Nisarg Patil