Sobes.tech
Junior

Jakie kolekcje istnieją w Java?

sobes.tech AI

Odpowiedź od AI

W Javie istnieją następujące główne interfejsy kolekcji, które są częścią Java Collections Framework:

  • Collection: Podstawowy interfejs definiujący ogólne operacje na grupach obiektów. Od niego dziedziczą podinterfejsy:

    • List: Kolekcja uporządkowana (sekwencja). Elementy mogą się powtarzać. Obsługuje dostęp po indeksie.
      • ArrayList: Dynamiczna tablica. Dobra do szybkiego dostępu po indeksie i dodawania na końcu. Wolna przy wstawianiu/usuwaniu w środku.
      • LinkedList: Lista dwukierunkowa. Dobra do wstawiania/usuwania na początku lub końcu. Wolna przy dostępie po indeksie.
      • Vector: Synchronizowana wersja ArrayList. Uważana za przestarzałą.
      • Stack: Dziedziczy z Vector, implementuje zachowanie stosu (LIFO).
    • Set: Kolekcja zawierająca tylko unikalne elementy. Nie gwarantuje kolejności.
      • HashSet: Implementowany za pomocą tablicy haszującej. Najszybszy do dodawania, usuwania i sprawdzania istnienia. Nie gwarantuje kolejności.
      • LinkedHashSet: Implementowany jako tablica haszująca + lista powiązana. Gwarantuje kolejność wstawiania.
      • TreeSet: Implementowany za pomocą drzewa czerwono-czarnego. Przechowuje elementy w posortowanej kolejności. Wolniejszy od HashSet, ale szybszy od LinkedHashSet przy wyszukiwaniu zakresów.
    • Queue: Kolekcja zaprojektowana do przechowywania elementów przed przetwarzaniem (FIFO - First-In, First-Out).
      • PriorityQueue: Elementy przechowywane zgodnie z ich naturalnym porządkiem lub komparatorem. Pobiera element o najwyższym priorytecie.
      • Deque: (Double Ended Queue) Obsługuje wstawianie i usuwanie z obu końców.
        • ArrayDeque: Implementacja Deque oparta na tablicy. Bardziej wydajna niż LinkedList jako kolejka/stos.
  • Map: Kolekcja przechowująca pary klucz-wartość. Klucze są unikalne.

    • HashMap: Implementowana za pomocą tablicy haszującej. Najszybsza do dodawania, usuwania i sprawdzania istnienia. Nie gwarantuje kolejności kluczy.
    • LinkedHashMap: Implementowana jako tablica haszująca + lista powiązana. Gwarantuje kolejność wstawiania lub dostępu.
    • TreeMap: Implementowana za pomocą drzewa czerwono-czarnego. Przechowuje pary klucz-wartość w posortowanej kolejności według kluczy. Wolniejsza od HashMap.
    • HashTable: Zsynchronizowana wersja HashMap. Uważana za przestarzałą.

Istnieją również przestarzałe klasy, które nie są częścią JCF, ale czasami się je spotyka:

  • Vector
  • Stack
  • Hashtable
  • Enumeration (interfejs)