Sobes.tech
Middle

Opisz hierarchię kolekcji w Java.

sobes.tech AI

Odpowiedź od AI

Hierarchia kolekcji w Javie opiera się na zestawie interfejsów, które zapewniają standardowy sposób reprezentowania grup obiektów.

Główne interfejsy:

  • Collection: podstawowy interfejs hierarchii. Definiuje podstawowe operacje, które można stosować do wszystkich kolekcji: dodawanie, usuwanie, sprawdzanie obecności elementów, określanie rozmiaru.
  • Set: kolekcja bez duplikatów i bez określonego porządku elementów.
  • List: uporządkowana kolekcja z dostępem do elementów po indeksie. Może zawierać duplikaty.
  • Queue: kolekcja przeznaczona do przechowywania elementów przed przetwarzaniem. Zazwyczaj przestrzega zasady FIFO (First-In, First-Out), ale istnieją też inne implementacje.
  • Deque: dwustronna kolejka. Obsługuje dodawanie i usuwanie elementów z obu końców.
  • Map: kolekcja przechowująca pary "klucz-wartość". Klucze muszą być unikalne. Nie rozszerza interfejsu Collection.

Główne klasy implementujące te interfejsy (przykłady):

Interfejs Klasy implementujące (przykłady) Opis
Set HashSet, LinkedHashSet, TreeSet Bez duplikatów. HashSet - bez porządku, LinkedHashSet - zachowuje kolejność dodawania, TreeSet - posortowany.
List ArrayList, LinkedList, Vector Uporządkowana. ArrayList - oparta na tablicy, LinkedList - oparta na liście powiązanej, Vector - zsynchronizowana (przestarzała).
Queue LinkedList, PriorityQueue Do przetwarzania. LinkedList - FIFO, PriorityQueue - oparta na priorytetach.
Deque ArrayDeque, LinkedList Dwustronna kolejka. ArrayDeque - oparta na tablicy, LinkedList - oparta na liście powiązanej.
Map HashMap, LinkedHashMap, TreeMap, Hashtable Klucz-wartość. HashMap - bez gwarantowanego porządku, LinkedHashMap - zachowuje kolejność dodawania/odwołań, TreeMap - posortowana po kluczach, Hashtable - zsynchronizowana (przestarzała).

Przykład użycia ArrayList:

// Tworzenie ArrayListy stringów
List<String> fruits = new ArrayList<>();
// Dodawanie elementów
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// Dostęp po indeksie
String firstFruit = fruits.get(0); // Apple
// Rozmiar kolekcji
int size = fruits.size(); // 3

Przykład użycia HashSet:

// Tworzenie HashSetu integerów
Set<Integer> numbers = new HashSet<>();
// Dodawanie elementów (duplikaty są ignorowane)
numbers.add(1);
numbers.add(2);
numbers.add(2); // Ignorowane
// Rozmiar kolekcji
int size = numbers.size(); // 2

Przykład użycia HashMap:

// Tworzenie HashMap: klucz - String, wartość - Integer
Map<String, Integer> ages = new HashMap<>();
// Dodawanie par klucz-wartość
ages.put("Alice", 30);
ages.put("Bob", 25);
// Pobieranie wartości po kluczu
int ageAlice = ages.get("Alice"); // 30
// Sprawdzanie, czy klucz istnieje
boolean hasBob = ages.containsKey("Bob"); // true