encyklopedia.run.place

Collections Framework

Collections Framework (CF) to zestaw interfejsów, klas i algorytmów udostępnionych w języku Java, które ułatwiają przechowywanie, przetwarzanie i manipulację zbiorami danych. Framework został wprowadzony w wersji Java 2 (JDK 1.2) i od tego czasu stanowi podstawowy element bibliotek standardowych.

Podstawowe pojęcia

CF opiera się na kilku kluczowych elementach:

  • Interfejsy kolekcji (Collection, List, Set, Map, Queue) definiujące operacje dostępne dla różnych typów zbiorów.
  • Klasy implementujące te interfejsy, takie jak ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap i inne.
  • Algorytmy udostępnione w klasie Collections, które działają na dowolnych obiektach implementujących odpowiednie interfejsy (np. sortowanie, wyszukiwanie, kopiowanie).
  • Iteratory (Iterator, ListIterator) umożliwiające sekwencyjny dostęp do elementów kolekcji bez ujawniania jej wewnętrznej struktury.

Hierarchia interfejsów

Główna hierarchia CF wygląda następująco:

        java.util.Collection
        ├─ java.util.List
        │   ├─ java.util.ArrayList
        │   └─ java.util.LinkedList
        ├─ java.util.Set
        │   ├─ java.util.HashSet
        │   └─ java.util.TreeSet
        └─ java.util.Queue
            └─ java.util.PriorityQueue
    

Oddzielnym drzewem jest Map, które nie dziedziczy po Collection, ale posiada własną hierarchię:

        java.util.Map
        ├─ java.util.HashMap
        ├─ java.util.LinkedHashMap
        └─ java.util.TreeMap
    

Klasy pomocnicze

Klasa Collections zawiera statyczne metody operujące na kolekcjach, m.in.:

  • sort(List<T> list) – sortowanie listy według naturalnego porządku lub podanego Comparator.
  • binarySearch(List<T> list, T key) – wyszukiwanie binarne w posortowanej liście.
  • shuffle(List<?> list) – losowe przetasowanie elementów.
  • reverse(List<?> list) – odwrócenie kolejności.
  • unmodifiableCollection(Collection<?> c) – tworzenie niezmiennych widoków.

Wydajność i wybór implementacji

Wybór konkretnej klasy zależy od wymagań dotyczących:

  • Czasu dostępu do elementów – ArrayList oferuje O(1) dostęp indeksowy, natomiast LinkedList zapewnia O(1) wstawianie i usuwanie na początku i końcu.
  • Unikalności elementów – Set (np. HashSet) gwarantuje brak duplikatów.
  • Kolejności – TreeSet i TreeMap utrzymują elementy w uporządkowanej kolejności (logarytmiczny dostęp).
  • Wsparcia dla wielowątkowości – klasy z pakietu java.util.concurrent (np. ConcurrentHashMap) oferują thread‑safe operacje.

Przykładowe użycie

import java.util.*;

public class PrzykladCF {
    public static void main(String[] args) {
        // Lista dynamiczna
        List<String> lista = new ArrayList<>();
        lista.add("jabłko");
        lista.add("banan");
        lista.add("czereśnia");
        
        // Sortowanie
        Collections.sort(lista);
        System.out.println("Posortowana lista: " + lista);
        
        // Zbiór unikalnych elementów
        Set<String> zbior = new HashSet<>(lista);
        zbior.add("banan"); // duplikat nie zostanie dodany
        System.out.println("Zbiór: " + zbior);
        
        // Mapa klucz‑wartość
        Map<String, Integer> mapa = new HashMap<>();
        mapa.put("jeden", 1);
        mapa.put("dwa", 2);
        mapa.put("trzy", 3);
        System.out.println("Mapa: " + mapa);
    }
}
    

Powyższy kod demonstruje podstawowe operacje – tworzenie, modyfikację i przetwarzanie kolekcji przy użyciu elementów z Collections Framework.

Rozszerzenia i alternatywy

Od Javy 8 wprowadzono Stream API, które umożliwia deklaratywne przetwarzanie danych z kolekcji (filtracja, mapowanie, redukcja). Biblioteki trzecich stron, takie jak Guava czy Apache Commons Collections, oferują dodatkowe struktury i narzędzia, ale opierają się na standardowym CF.

Historia

Pierwsze próby standaryzacji struktur danych w Javie pojawiły się w latach 1995–1998. Projekt Collections Framework został opracowany pod kierownictwem Josh Block i Neal Gafter. Oficjalna publikacja nastąpiła wraz z wydaniem J2SE 1.2 w 1998 roku.

Powiązane pojęcia

Collections Framework pozostaje jednym z najważniejszych elementów platformy Java, zapewniając spójną, wydajną i łatwą w użyciu infrastrukturę do pracy z danymi.