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șteCollections.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.