# Java Data Structures Cheat Sheet ## 📦 1. Array **Какво е?** Фиксиран по размер контейнер за елементи от един и същи тип. **Кога се използва?** Когато знаем предварително колко елемента ще имаме. ```java int[] numbers = {1, 2, 3}; System.out.println(numbers[0]); // 1 ``` ## 📦 2. ArrayList **Какво е?** Динамичен масив с бърз достъп по индекс. **Кога се използва?** Когато размерът на списъка може да се променя често. ```java import java.util.ArrayList; ArrayList names = new ArrayList<>(); names.add("Иван"); System.out.println(names.get(0)); // Иван ``` ## 📦 3. LinkedList **Какво е?** Двусвързан списък с лесно добавяне и премахване. **Кога се използва?** Когато често добавяме/махаме от началото или средата. ```java import java.util.LinkedList; LinkedList list = new LinkedList<>(); list.add(10); list.add(20); System.out.println(list.getFirst()); // 10 ``` ## 📦 4. HashMap **Какво е?** Несортирана асоциативна структура от ключ–стойност. **Кога се използва?** Когато искаме бърз достъп по ключ. ```java import java.util.HashMap; HashMap map = new HashMap<>(); map.put("А", 1); map.put("Б", 2); System.out.println(map.get("А")); // 1 ``` ## 📦 5. TreeMap **Какво е?** Сортирана по ключове асоциативна структура. **Кога се използва?** Когато искаме ключовете да са подредени. ```java import java.util.TreeMap; TreeMap map = new TreeMap<>(); map.put("Б", 2); map.put("А", 1); System.out.println(map.firstKey()); // А ``` ## 📦 6. HashSet **Какво е?** Множество без повторения, без определен ред. **Кога се използва?** Когато трябва да съхраним уникални елементи. ```java import java.util.HashSet; HashSet set = new HashSet<>(); set.add("Java"); set.add("Java"); System.out.println(set.size()); // 1 ``` ## 📦 7. TreeSet **Какво е?** Сортирано множество без дубликати. **Кога се използва?** Когато искаме уникални елементи в нареден вид. ```java import java.util.TreeSet; TreeSet set = new TreeSet<>(); set.add(3); set.add(1); System.out.println(set.first()); // 1 ``` ## 📦 8. Stack **Какво е?** Стек (LIFO – последен влязъл, пръв излиза). **Кога се използва?** При рекурсивни алгоритми, браузър история и др. ```java import java.util.Stack; Stack stack = new Stack<>(); stack.push(10); stack.push(20); System.out.println(stack.pop()); // 20 ``` ## 📦 9. Queue **Какво е?** Опашка (FIFO – първи влязъл, първи излиза). **Кога се използва?** При обработка на събития, задачи и т.н. ```java import java.util.Queue; import java.util.LinkedList; Queue queue = new LinkedList<>(); queue.add("A"); queue.add("B"); System.out.println(queue.poll()); // A ``` ## 📦 10. Deque (Double-Ended Queue) **Какво е?** Опашка с добавяне/премахване и от двете страни. **Кога се използва?** При буфери или палиндромни проверки. ```java import java.util.ArrayDeque; import java.util.Deque; Deque deque = new ArrayDeque<>(); deque.addFirst("начало"); deque.addLast("край"); System.out.println(deque.getFirst()); // начало ``` ## 📦 11. PriorityQueue **Какво е?** Приоритетна опашка – елементите се извеждат според приоритет. **Кога се използва?** При задачи със спешност, алгоритъм на Дейкстра и др. ```java import java.util.PriorityQueue; PriorityQueue pq = new PriorityQueue<>(); pq.add(30); pq.add(10); System.out.println(pq.poll()); // 10 ``` ## 📦 12. Hashtable **Какво е?** Стара, синхронизирана хеш таблица. **Кога се използва?** Рядко – заменена от HashMap. ```java import java.util.Hashtable; Hashtable table = new Hashtable<>(); table.put("Ключ", "Стойност"); System.out.println(table.get("Ключ")); // Стойност ``` ## 📦 13. Vector **Какво е?** Стара версия на ArrayList, синхронизирана. **Кога се използва?** Почти никога в съвременен код. ```java import java.util.Vector; Vector vector = new Vector<>(); vector.add(100); System.out.println(vector.get(0)); // 100 ``` ## 📦 14. BitSet **Какво е?** Масив от бита (boolean стойности). **Кога се използва?** За ефективни побитови операции. ```java import java.util.BitSet; BitSet bits = new BitSet(); bits.set(2); System.out.println(bits.get(2)); // true ```