Sobes.tech
Junior

Jakie są implementacje kolekcji w języku programowania Java?

sobes.tech AI

Odpowiedź od AI

  • Interfejsy:

    • Collection: Podstawowy interfejs dla wszystkich kolekcji.
    • List: Kolekcja uporządkowana (z indeksami).
    • Set: Kolekcja bez duplikatów.
    • SortedSet: Kolekcja bez duplikatów, elementy są posortowane.
    • Map: Tablica asocjacyjna (klucz-wartość).
    • SortedMap: Posortowana tablica asocjacyjna według kluczy.
    • Queue: Kolekcja do przechowywania elementów przed ich przetwarzaniem.
    • Deque: Kolejka dwustronna.
  • Klasy (główne implementacje):

    • Dla List:

      • ArrayList: Dynamiczna tablica. Szybki dostęp po indeksie, wolne operacje wstawiania/usuwania w środku.
      • LinkedList: Lista dwukierunkowa. Wolny dostęp po indeksie, szybkie wstawianie/usuwanie w środku.
      • Vector: Przestarzała, zsynchronizowana, odpowiednik ArrayList.
      • Stack: Podklasa Vector, implementuje stos (LIFO).
    • Dla Set:

      • HashSet: Implementacja oparta na tablicy haszującej. Nie gwarantuje kolejności.
      • LinkedHashSet: Oparta na tablicy haszującej i liście powiązanej. Zachowuje kolejność wstawiania.
      • TreeSet: Oparta na drzewie czerwono-czarnym. Elementy są posortowane rosnąco.
    • Dla Map:

      • HashMap: Oparta na tablicy haszującej. Nie gwarantuje kolejności par klucz-wartość.
      • Hashtable: Przestarzała, zsynchronizowana, odpowiednik HashMap.
      • LinkedHashMap: Oparta na tablicy haszującej i liście powiązanej. Zachowuje kolejność wstawiania.
      • TreeMap: Oparta na drzewie czerwono-czarnym. Parę klucz-wartość posortowano według kluczy.
    • Dla Queue:

      • PriorityQueue: Kolejka priorytetowa. Elementy są wyciągane w kolejności naturalnej lub przez komparator.
      • ArrayDeque: Implementacja kolejki dwustronnej opartej na tablicy.
  • Narzędzia:

    • Collections: Statyczne metody do pracy z kolekcjami (sortowanie, wyszukiwanie, synchronizacja itp.).
// Przykład użycia ArrayList
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
System.out.println(names.get(0)); // Alice
// Przykład użycia HashSet
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(1); // Duplikat nie zostanie dodany
System.out.println(numbers.size()); // 2
// Przykład użycia HashMap
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 30);
ages.put("Bob", 25);
System.out.println(ages.get("Alice")); // 30
// Przykład użycia PriorityQueue
Queue<Integer> priorityQueue = new PriorityQueue<>();
priorityQueue.add(3);
priorityQueue.add(1);
priorityQueue.add(2);
System.out.println(priorityQueue.poll()); // 1 (najniższy priorytet)