Comment vérifier si un tableau contient une valeur en Java : 5 erreurs fatales

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment vérifier si un tableau contient une valeur en Java ? Analysons les erreurs principales (et apprenons-en)



Imaginez la situation : vous codez en Java, vous avez un tableau de chaînes (ou de nombres), et vous devez déterminer si une valeur spécifique s'y trouve. Cela semble simple, n'est-ce pas ? Pourtant, cette question (How do I determine whether an array contains a particular value in Java?) a accumulé plus d'un demi-million de vues sur Stack Overflow. Des milliers de développeurs (des débutants aux seniors) trébuchent sur les mêmes pièges.



Dans cet article, nous ne nous contenterons pas de donner une réponse toute faite. Nous passerons en revue les 5 erreurs les plus courantes qui transforment une tâche simple en casse-tête. Vous découvrirez pourquoi Arrays.asList().contains() peut ne pas fonctionner, comment faire ami-ami avec Stream et les primitifs, et quand la recherche binaire devient un piège. C'est parti !



Erreur n°1 : Utiliser equals() pour les tableaux (la catastrophe principale des débutants)



L'échec le plus courant — tenter d'appeler equals() ou contains() directement sur le tableau.



// ❌ ERREUR FATALEString[] fruits = {"apple", "banana", "orange"};System.out.println(fruits.equals("apple")); // falseSystem.out.println(fruits.contains("apple")); // Erreur de compilation !


Pourquoi cela ne fonctionne-t-il pas ? Un tableau en Java est un objet, mais il n'a pas de méthode contains(). Et la méthode equals() compare les références (les adresses mémoire), pas le contenu. Votre tableau fruits est un objet dans le tas, et la chaîne "apple" est un autre objet. Ils ne seront jamais égaux.



Comment faire : Utiliser une boucle ou les utilitaires de java.util.Arrays.



// ✅ CORRECT : Parcours manuelString[] fruits = {"apple", "banana", "orange"};String target = "apple";boolean found = false;for (String fruit : fruits) {    if (target.equals(fruit)) {        found = true;        break;    }}System.out.println(found); // true


Erreur n°2 : Arrays.asList().contains() pour les tableaux de primitifs



Une solution d'une perfidie géniale. Vous lisez Stack Overflow, voyez le conseil Arrays.asList(yourArray).contains(value) et l'appliquez joyeusement à un tableau int[]. Et vous obtenez false.



// ❌ NE FONCTIONNE PAS POUR LES PRIMITIFSint[] numbers = {1, 2, 3, 4, 5};List<Integer> list = Arrays.asList(numbers); // ATTENTION !System.out.println(list.contains(3)); // false 


Pourquoi ? Arrays.asList() pour un tableau primitif int[] crée un List<int[]> (une liste d'un seul élément — le tableau), et non un List<Integer>. Vous vérifiez si la liste contient le tableau numbers avec le nombre 3. Bien sûr que non. La liste contient un seul élément — le tableau lui-même {1,2,3,4,5}.



Comment faire : Pour les primitifs, utilisez une boucle, IntStream ou convertissez en une liste d'objets.



// ✅ CORRECT : Avec IntStream (Java 8+)int[] numbers = {1, 2, 3, 4, 5};boolean found = IntStream.of(numbers).anyMatch(n -> n == 3);System.out.println(found); // true

// ✅ OU avec une boucleboolean found2 = false;for (int num : numbers) { if (num == 3) { found2 = true; break; }}


Erreur n°3 : Utilisation naïve de binarySearch() sans tri



Arrays.binarySearch() est un outil puissant, mais il fonctionne uniquement sur des tableaux triés. Si vous lui donnez un tableau non trié, le résultat sera imprévisible (souvent un nombre négatif, même si l'élément est présent).



// ❌ RECHERCHE BINAIRE SUR UN TABLEAU NON TRIÉString[] unsorted = {"banana", "apple", "orange"};int index = Arrays.binarySearch(unsorted, "apple");System.out.println(index); // Peut être                

Blogs

Book Recommendations