List.reversed în Java

Returnează o vedere a listei în ordine inversă; nu copiază elementele și urmărește modificările listei originale.

Sintaxă
default List<E> reversed()

Ce face List.reversed

reversed() nu creează o listă nouă. Returnează o vedere (view): o listă care citește elementele originalului de la coadă spre început. Dacă originalul se schimbă, vederea arată schimbarea. Dacă originalul este modificabil, și scrierile prin vedere (de exemplu add) ajung în original, la capătul opus.

Pentru o copie inversată independentă, scrie new ArrayList<>(lista.reversed()). Pentru a inversa chiar lista, pe loc, folosește Collections.reverse(lista).

Ce returnează

O listă (vedere) cu elementele în ordine inversă.

Exemple

Exemplul 1: Numărătoare inversă

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> numere = List.of(1, 2, 3, 4, 5);
        System.out.println("Invers: " + numere.reversed());
        for (int n : numere.reversed()) {
            System.out.print(n + "... ");
        }
        System.out.println("Start!");
        System.out.println("Originalul: " + numere);
    }
}

Rezultat

Invers: [5, 4, 3, 2, 1]
5... 4... 3... 2... 1... Start!
Originalul: [1, 2, 3, 4, 5]

Exemplul 2: Vederea urmărește lista originală

După add pe original, vederea inversată are și ea elementul nou, la început. addFirst pe vedere adaugă la sfârșitul originalului.

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

public class Main {
    public static void main(String[] args) {
        List<String> istoric = new ArrayList<>(List.of("pagina 1", "pagina 2"));
        List<String> recente = istoric.reversed();

        istoric.add("pagina 3");
        System.out.println("Recente: " + recente);

        recente.addFirst("pagina 4");
        System.out.println("Istoric: " + istoric);

        List<String> copie = new ArrayList<>(istoric.reversed());
        istoric.clear();
        System.out.println("Copia independentă: " + copie + ", vederea: " + recente);
    }
}

Rezultat

Recente: [pagina 3, pagina 2, pagina 1]
Istoric: [pagina 1, pagina 2, pagina 3, pagina 4]
Copia independentă: [pagina 4, pagina 3, pagina 2, pagina 1], vederea: []

Greșeli frecvente

  • Crezi că reversed() inversează lista pe loc. Originalul rămâne la fel; pentru inversare pe loc folosește Collections.reverse.
  • Păstrezi vederea și apoi golești originalul, crezând că ai o copie: vederea devine și ea goală.

Comenzi înrudite

  • Collections.reverse: reverse inversează pe loc ordinea elementelor unei liste; swap schimbă între ele elementele de pe două poziții.
  • List.sort: Sortează lista pe loc după comparatorul dat; cu null sortează în ordinea naturală (numere crescător, texte alfabetic).
  • List.addFirst: Adaugă un element la începutul (addFirst) sau la sfârșitul (addLast) listei; metode noi din Java 21.
  • List.subList: Returnează o vedere a unei porțiuni din listă, de la fromIndex inclusiv la toIndex exclusiv.