Deși framework-ul java.util.Collections este considerat una dintre cele mai bune biblioteci din istoria programării, el a conținut o scăpare arhitecturală bizară timp de peste 25 de ani: lipsea o interfață comună pentru colecțiile care mențin o ordine definită a elementelor.
Pentru a obține primul sau ultimul element dintr-o colecție ordonată, dezvoltatorii trebuiau să folosească metode complet divergente:
- Pentru
List:list.get(0)șilist.get(list.size() - 1) - Pentru
Deque:deque.getFirst()șideque.getLast() - Pentru
LinkedHashSet:set.iterator().next()(iar pentru ultimul element trebuia iterată întreaga mulțime!)
Stabilizată în Java 21 LTS (JEP 431), noua ierarhie Sequenced Collections unifică toate aceste structuri sub o interfață coerentă și uniformă.
Utilizarea Noilor Metode SequencedCollection
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
public class SequencedCollectionsDemo {
public static void main(String[] args) {
// 1. Operațiuni uniforme pe liste:
List limbaje = new ArrayList<>(List.of("Java", "Go", "Rust"));
limbaje.addFirst("C++"); // Adaugă la început
limbaje.addLast("Python"); // Adaugă la sfârșit
System.out.println("Primul element: " + limbaje.getFirst()); // "C++"
System.out.println("Ultimul element: " + limbaje.getLast()); // "Python"
// 2. Vizualizare inversată în timp O(1) fără copiere de date:
List inversat = limbaje.reversed();
System.out.println("Listă inversată: " + inversat);
// 3. SequencedMap pentru dicționare ordonate:
var map = new LinkedHashMap();
map.put("Unu", 1);
map.put("Doi", 2);
map.put("Trei", 3);
System.out.println("Prima intrare din dicționar: " + map.firstEntry());
System.out.println("Ultima intrare din dicționar: " + map.lastEntry());
// Inversarea hărții de parcurgere:
map.reversed().forEach((k, v) -> System.out.println(k + " => " + v));
}
}
Ierarhia Interfețelor Sequenced Collections
| Interfață Nouă | Extinde | Implementată Nativ De |
|---|---|---|
SequencedCollection<E> |
Collection<E> |
List, Deque, LinkedHashSet |
SequencedSet<E> |
Set<E>, SequencedCollection<E> |
LinkedHashSet, TreeSet |
SequencedMap<K, V> |
Map<K, V> |
LinkedHashMap, TreeMap |