Ce face List.contains
contains(o) returnează true dacă cel puțin un element este egal cu o (comparat cu equals). containsAll(c) returnează true dacă fiecare element din c se găsește în listă; pentru o colecție c goală, rezultatul este true.
Pe o listă, contains verifică elementele unul câte unul, deci durează proporțional cu lungimea listei. Dacă faci multe căutări într-o colecție mare, folosește un HashSet. Pentru obiectele tale (clase proprii), contains funcționează corect doar dacă ai definit equals; un record îl are automat.
Parametri
| Parametru | Descriere |
|---|---|
o |
Valoarea căutată (poate fi și null). |
c |
Colecția cu toate valorile care trebuie să existe. |
Ce returnează
true sau false.
Exemple
Exemplul 1: Este orașul pe traseu?
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> traseu = List.of("București", "Ploiești", "Brașov", "Sibiu");
System.out.println("Brașov: " + traseu.contains("Brașov"));
System.out.println("Cluj: " + traseu.contains("Cluj"));
System.out.println("brașov (litere mici): " + traseu.contains("brașov"));
System.out.println("Ambele: " + traseu.containsAll(List.of("Sibiu", "Ploiești")));
System.out.println("Și Cluj: " + traseu.containsAll(List.of("Sibiu", "Cluj")));
}
}
Rezultat
Brașov: true
Cluj: false
brașov (litere mici): false
Ambele: true
Și Cluj: false
Exemplul 2: contains cu record (equals automat)
Un record compară toate câmpurile în equals, deci un obiect nou cu aceleași valori este găsit.
import java.util.List;
public class Main {
record Carte(String titlu, String autor) {}
public static void main(String[] args) {
List<Carte> raft = List.of(
new Carte("Ion", "Liviu Rebreanu"),
new Carte("Enigma Otiliei", "George Călinescu"));
Carte cautata = new Carte("Ion", "Liviu Rebreanu");
System.out.println("Găsită: " + raft.contains(cautata));
}
}
Rezultat
Găsită: true
Greșeli frecvente
- Cauți într-o listă de obiecte dintr-o clasă proprie fără
equals:containscompară atunci adresele și returneazăfalsepentru un obiect nou cu aceleași date. - Te aștepți ca
containssă ignore literele mari/mici. Compararea este exactă; pentru texte normalizează (de exemplu cutoLowerCase()) înainte să le pui în listă. - Pe
List<Long>scriicontains(5): valoarea 5 devineInteger, nuLong, și rezultatul estefalse. Scriecontains(5L).
Comenzi înrudite
List.indexOf: Returnează poziția primei (indexOf) sau ultimei (lastIndexOf) apariții a unei valori, ori -1 dacă lipsește.Set.contains: contains verifică rapid dacă un element este în mulțime; containsAll verifică dacă sunt toate elementele altei colecții.Map.containsKey: containsKey verifică rapid dacă o cheie există în map; containsValue caută o valoare, mai lent, printre toate perechile.