Sobes.tech
Junior

Jaký je rozdíl mezi HashMap a LinkedList?

sobes.tech AI

Odpověď od AI

HashMap

  • Implementuje asociativní pole (mapu "klíč-hodnota").
  • Přístup, vkládání a odstraňování prvků mají průměrnou složitost O(1).
  • Pořadí prvků není garantováno.
  • Používá hashování pro rychlé vyhledávání.
// Příklad použití HashMap
import 'dart:collection';

void main() {
  final HashMap<String, int> inventory = HashMap();
  inventory['jablka'] = 5;
  inventory['banány'] = 10;
  print(inventory['jablka']); // Vypíše 5
}

LinkedList

  • Implementuje spojový seznam.
  • Přístup k prvku podle indexu má složitost O(n).
  • Vkládání a odstraňování prvků na začátku nebo na konci seznamu mají složitost O(1).
  • Efektivní pro operace s přidáváním/odstraňováním prvků v jakékoli části seznamu (při existenci odkazu na uzel) se složitostí O(1).
  • Podporuje vkládání a odstraňování prvků s uchováním odkazů na uzly (LinkedListEntry), zajišťující O(1).
  • Pořadí prvků odpovídá pořadí přidání.
// Příklad použití LinkedList
import 'dart:collection';

void main() {
  final LinkedList<String> shoppingList = LinkedList();
  shoppingList.addFirst(LinkedListEntry('Mléko'));
  shoppingList.add(LinkedListEntry('Chléb')); // Přidá na konec
  print(shoppingList.first); // Vypíše Mléko
  print(shoppingList.where((entry) => entry.element == 'Chléb').first.element); // Příklad přístupu, neoptimální
}

// Příklad použití LinkedListEntry
class LinkedListEntry<T> extends LinkedListEntry<LinkedListEntry> {
  final T data;
  LinkedListEntry(this.data);

  @override
  String toString() => data.toString();
}
Charakteristika HashMap LinkedList
Datová struktura Asociativní pole Spojový seznam
Uložení Klíč-hodnota (páry) Prvky (uzly)
Přístup podle indexu Přímo nepodporováno O(n)
Přístup podle klíče O(1) (průměrně) Nepodporováno
Vkládání/Odstraňování O(1) (průměrně) O(1) (na začátku/konce), O(1) (podle odkazu na uzel)
Pořadí prvků Není garantováno Zachovává pořadí přidání
Paměťová náročnost Větší kvůli hashování Menší, pokud jsou uzly malé
Hlavní použití Rychlé vyhledávání podle klíče Efektivní operace na začátku/konce/jakékoli části (podle odkazu)