List.indexOf în Java

Returnează poziția primei (indexOf) sau ultimei (lastIndexOf) apariții a unei valori, ori -1 dacă lipsește.

Sintaxă
int indexOf(Object o)
int lastIndexOf(Object o)

Ce face List.indexOf

indexOf(o) caută de la începutul listei și returnează poziția primului element egal cu o. lastIndexOf(o) caută de la sfârșit și returnează poziția ultimei apariții. Dacă valoarea nu există, ambele returnează -1.

Compararea se face cu equals. Dacă vrei doar să știi dacă valoarea există, contains este mai clar. Dacă indexOf și lastIndexOf dau aceeași poziție (și nu -1), valoarea apare o singură dată.

Parametri

Parametru Descriere
o Valoarea căutată.

Ce returnează

Poziția (de la 0) sau -1.

Exemple

Exemplul 1: Prima și ultima zi cu ploaie

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> vreme = List.of("soare", "ploaie", "nori", "ploaie", "soare");
        System.out.println("Prima ploaie: ziua " + vreme.indexOf("ploaie"));
        System.out.println("Ultima ploaie: ziua " + vreme.lastIndexOf("ploaie"));
        System.out.println("Ninsoare: " + vreme.indexOf("ninsoare"));
    }
}

Rezultat

Prima ploaie: ziua 1
Ultima ploaie: ziua 3
Ninsoare: -1

Exemplul 2: Găsește poziția și înlocuiește

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> echipa = new ArrayList<>(List.of("Ana", "Bogdan", "Carmen"));
        int poz = echipa.indexOf("Bogdan");
        if (poz != -1) {
            echipa.set(poz, "Dan");
        }
        System.out.println(echipa);
        System.out.println("Bogdan apare o singură dată? "
            + (echipa.indexOf("Bogdan") == echipa.lastIndexOf("Bogdan")));
    }
}

Rezultat

[Ana, Dan, Carmen]
Bogdan apare o singură dată? true

Greșeli frecvente

  • Verifici rezultatul cu if (lista.indexOf(x) > 0). Poziția 0 este validă; condiția corectă este != -1 sau >= 0.
  • Folosești indexOf într-o buclă pe o listă mare: fiecare apel parcurge lista. Pentru căutări repetate, construiește un HashMap de la valoare la poziție.

Comenzi înrudite

  • List.contains: Verifică dacă lista conține o valoare (contains) sau toate valorile altei colecții (containsAll).
  • List.get: get citește elementul de la o poziție; set îl înlocuiește și returnează valoarea veche.
  • Collections.binarySearch: Caută rapid o valoare într-o listă sortată, prin înjumătățiri. Returnează poziția sau un număr negativ care arată unde ar trebui inserată.
  • Arrays.binarySearch: Caută rapid o valoare într-un array sortat. Returnează poziția sau un număr negativ care arată unde ar trebui inserată.