List.contains în Java

Verifică dacă lista conține o valoare (contains) sau toate valorile altei colecții (containsAll).

Sintaxă
boolean contains(Object o)
boolean containsAll(Collection<?> c)

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: contains compară atunci adresele și returnează false pentru un obiect nou cu aceleași date.
  • Te aștepți ca contains să ignore literele mari/mici. Compararea este exactă; pentru texte normalizează (de exemplu cu toLowerCase()) înainte să le pui în listă.
  • Pe List<Long> scrii contains(5): valoarea 5 devine Integer, nu Long, și rezultatul este false. Scrie contains(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.