Sobes.tech
Middle

Опишете йерархията на колекциите в Java.

sobes.tech AI

Отговор от AI

Йерархията на колекциите в Java се основава на набор от интерфейси, които предоставят стандартен начин за представяне на групи от обекти.

Основни интерфейси:

  • Collection: кореновият интерфейс на йерархията. Определя основните операции, приложими към всички колекции: добавяне, премахване, проверка за наличие на елементи, определяне на размер.
  • Set: колекция, която не съдържа дублиращи се елементи и няма определен ред на елементите.
  • List: подредена колекция с възможност за достъп до елементите по индекс. Може да съдържа дублиращи се елементи.
  • Queue: колекция, предназначена за съхранение на елементи преди обработка. Обикновено следва правилото FIFO (First-In, First-Out), но съществуват и други реализации.
  • Deque: двупосочна опашка. Поддържа добавяне и премахване на елементи от двата края.
  • Map: колекция, която съхранява двойки "ключ-стойност". Ключовете трябва да са уникални. Не разширява интерфейса Collection.

Основни реализиращи класове (примери):

Интерфейс Реализиращи класове (примери) Описание
Set HashSet, LinkedHashSet, TreeSet Без дублиране. HashSet - без ред, LinkedHashSet - запазва реда на добавяне, TreeSet - сортиран.
List ArrayList, LinkedList, Vector Подредена. ArrayList - базирана на масив, LinkedList - базирана на свързан списък, Vector - синхронизирана (остаряла).
Queue LinkedList, PriorityQueue За обработка. LinkedList - FIFO, PriorityQueue - базирана на приоритети.
Deque ArrayDeque, LinkedList Двупосочна опашка. ArrayDeque - базирана на масив, LinkedList - базирана на свързан списък.
Map HashMap, LinkedHashMap, TreeMap, Hashtable Ключ-стойност. HashMap - без гарантиран ред, LinkedHashMap - запазва реда на добавяне/достъп, TreeMap - сортиран по ключове, Hashtable - синхронизирана (остаряла).

Пример за използване на ArrayList:

// Създаване на ArrayList от низове
List<String> fruits = new ArrayList<>();
// Добавяне на елементи
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// Достъп по индекс
String firstFruit = fruits.get(0); // Apple
// Размер на колекцията
int size = fruits.size(); // 3

Пример за използване на HashSet:

// Създаване на HashSet от цели числа
Set<Integer> numbers = new HashSet<>();
// Добавяне на елементи (дублиращите се се игнорират)
numbers.add(1);
numbers.add(2);
numbers.add(2); // Игнорира се
// Размер на колекцията
int size = numbers.size(); // 2

Пример за използване на HashMap:

// Създаване на HashMap: ключ - String, стойност - Integer
Map<String, Integer> ages = new HashMap<>();
// Добавяне на двойки ключ-стойност
ages.put("Alice", 30);
ages.put("Bob", 25);
// Получаване на стойност по ключ
int aliceAge = ages.get("Alice"); // 30
// Проверка за наличие на ключ
boolean hasBob = ages.containsKey("Bob"); // вярно