Sobes.tech
Junior

Какво е HashMap и Set и в кои случаи е по-добре да ги използвате?

sobes.tech AI

Отговор от AI

HashMap е колекция, която съхранява двойки ключ-стойност. Ключовете са уникални, а стойностите могат да се повтарят. Използва хеширане за бърз достъп (средно O(1)) до елементите по ключ.

Set е колекция, която съхранява уникални елементи. Не гарантира реда на съхранение, освен ако не се използва конкретна имплементация (например, LinkedHashSet). Операциите добавяне, изтриване и проверка за наличие на елемент обикновено се изпълняват в O(1). Има различни имплементации, например:

  • HashSet: Не гарантира реда на елементите.
  • LinkedHashSet: Запазва реда на добавяне.
  • TreeSet: Съхранява елементите в сортиран ред.

Кога да се използва:

  • HashMap:
    • Когато е необходим ефективен търсене, вмъкване или изтриване по ключ.
    • За съхранение на асоциативни данни (например, речник).
    • Когато трябва бързо да се провери дали стойност съществува по ключ.
  • Set:
    • Когато е необходимо да се съхраняват само уникални елементи.
    • За ефективна проверка дали даден елемент съществува в колекцията.
    • За операции с множества (обединение, пресичане).

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

// Създаване на HashMap
HashMap<String, Integer> възраст = new HashMap<>();

// Добавяне на елементи
възраст.put("Alice", 30);
възраст.put("Bob", 25);
възраст.put("Charlie", 35);

// Получаване на стойност по ключ
int възрастБоб = възраст.get("Bob"); // възрастБоб = 25

// Проверка дали ключът съществува
boolean съдържаAlice = възраст.containsKey("Alice"); // съдържаAlice = true

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

// Създаване на HashSet
HashSet<String> имена = new HashSet<>();

// Добавяне на елементи
имена.add("Alice");
имена.add("Bob");
имена.add("Charlie");
имена.add("Alice"); // Не ще бъде добавено, тъй като вече съществува

// Проверка дали елементът съществува
boolean съдържаБоб = имена.contains("Bob"); // съдържаБоб = true

// Итерация през елементите
for (String име : имена) {
    System.out.println(име);
}