Wie man prüft, ob ein Array einen Wert in Java enthält: 5 fatale Fehler

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Wie prüft man, ob ein Array einen Wert in Java enthält? Wir analysieren die häufigsten Fehler (und lernen daraus)



Stellen Sie sich vor: Sie programmieren in Java, haben ein Array von Strings (oder Zahlen) und müssen herausfinden, ob ein bestimmter Wert darin enthalten ist. Was könnte einfacher sein? Aber genau diese Frage (How do I determine whether an array contains a particular value in Java?) hat auf Stack Overflow über eine halbe Million Aufrufe erhalten. Tausende Entwickler (vom Anfänger bis zum Senior) stolpern über dieselben Fallstricke.



In diesem Artikel geben wir nicht nur eine fertige Antwort. Wir gehen die 5 häufigsten Fehler durch, die aus einer einfachen Aufgabe eine Kopfschmerzquelle machen. Sie erfahren, warum Arrays.asList().contains() versagen kann, wie man Stream mit primitiven Typen nutzt und wann die binäre Suche zur Falle wird. Los geht's!



Fehler Nr. 1: Verwendung von equals() für Arrays (die größte Katastrophe für Anfänger)



Der häufigste Fehlschlag – der Versuch, equals() oder contains() direkt auf dem Array aufzurufen.



// ❌ FATALER FEHLERString[] fruits = {"apple", "banana", "orange"};System.out.println(fruits.equals("apple")); // falseSystem.out.println(fruits.contains("apple")); // Kompilierungsfehler!


Warum funktioniert das nicht? Ein Array in Java ist ein Objekt, hat aber keine Methode contains(). Und die Methode equals() vergleicht Referenzen (Speicheradressen), nicht den Inhalt. Ihr Array fruits ist ein Objekt im Heap, der String "apple" ein anderes Objekt. Sie werden niemals gleich sein.



So sollte es sein: Verwenden Sie eine Schleife oder Hilfsfunktionen aus java.util.Arrays.



// ✅ RICHTIG: Manuelle DurchsuchungString[] 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


Fehler Nr. 2: Arrays.asList().contains() für Arrays mit primitiven Typen



Eine geniale, aber tückische Lösung. Sie lesen Stack Overflow, sehen den Tipp Arrays.asList(yourArray).contains(value) und wenden ihn freudig auf ein int[]-Array an. Und erhalten false.



// ❌ FUNKTIONIERT NICHT FÜR PRIMITIVE TYPENint[] numbers = {1, 2, 3, 4, 5};List<Integer> list = Arrays.asList(numbers); // ACHTUNG!System.out.println(list.contains(3)); // false 


Warum? Arrays.asList() erstellt für ein primitives Array int[] ein List<int[]> (eine Liste mit einem Element – dem Array), nicht List<Integer>. Sie prüfen, ob die Liste das Array numbers mit der Zahl 3 enthält. Natürlich nicht. Die Liste enthält ein einziges Element – das Array selbst {1,2,3,4,5}.



So sollte es sein: Für primitive Typen verwenden Sie eine Schleife, IntStream oder konvertieren Sie in eine Liste von Objekten.



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

// ✅ ODER über eine Schleifeboolean found2 = false;for (int num : numbers) { if (num == 3) { found2 = true; break; }}


Fehler Nr. 3: Naive Verwendung von binarySearch() ohne Sortierung



Arrays.binarySearch() ist ein mächtiges Werkzeug, funktioniert aber nur auf sortierten Arrays. Wenn Sie ihm ein unsortiertes Array übergeben, ist das Ergebnis unvorhersehbar (oft eine negative Zahl, selbst wenn das Element vorhanden ist).



// ❌ BINÄRE SUCHE AUF EINEM UNSORTIERTEN ARRAYString[] unsorted = {"banana", "apple", "orange"};int index = Arrays.binarySearch(unsorted, "apple");System.out.println(index); // Kann sein                

Blogs

Buchempfehlungen