Sobes.tech
Junior

Aký je rozdiel medzi HashMap a LinkedList?

sobes.tech AI

Odpoveď od AI

HashMap

  • Implementuje asociatívny poľ (mapu "kľúč-hodnota").
  • Prístup, vkladanie a odstraňovanie prvkov majú priemernú zložitosť O(1).
  • Poradie prvkov nie je garantované.
  • Používa hashovanie pre rýchle vyhľadávanie.
// Príklad použitia HashMap
import 'dart:collection';

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

LinkedList

  • Implementuje spojený zoznam.
  • Prístup k prvku podľa indexu má zložitosť O(n).
  • Vkladanie a odstraňovanie prvkov na začiatku alebo na konci zoznamu majú zložitosť O(1).
  • Efektívny je pre operácie s pridávaním/odstraňovaním prvkov v ľubovoľnej časti zoznamu (pri existencii odkazu na uzol) so zložitosťou O(1).
  • Podporuje vkladanie a odstraňovanie prvkov s uchovaním odkazov na uzly (LinkedListEntry), zabezpečujúc O(1).
  • Poradie prvkov zodpovedá poradiu pridania.
// Príklad použitia LinkedList
import 'dart:collection';

void main() {
  final LinkedList<String> shoppingList = LinkedList();
  shoppingList.addFirst(LinkedListEntry('Mlieko'));
  shoppingList.add(LinkedListEntry('Chlieb')); // Pridá na koniec
  print(shoppingList.first); // Vypíše Mlieko
  print(shoppingList.where((entry) => entry.element == 'Chlieb').first.element); // Príklad prístupu, nie je optimálny
}

// Príklad použitia LinkedListEntry
class LinkedListEntry<T> extends LinkedListEntry<LinkedListEntry> {
  final T data;
  LinkedListEntry(this.data);

  @override
  String toString() => data.toString();
}
Charakteristika HashMap LinkedList
Dátová štruktúra Asociatívny poľ Spojený zoznam
Uloženie Kľúč-hodnota (páry) Prvky (uzly)
Prístup podľa indexu Nepodporované priamo O(n)
Prístup podľa kľúča O(1) (v priemere) Nepodporované
Vkladanie/Odstraňovanie O(1) (v priemere) O(1) (na začiatku/konce), O(1) (cez odkaz na uzol)
Poradie prvkov Nie je garantované Zachováva poradie pridania
Použitie pamäti Viac kvôli hashovaniu Menej, ak sú uzly malé
Hlavné určenie Rýchle vyhľadávanie podľa kľúča Efektívne operácie na začiatku/konce/ľubovoľnej časti (cez odkaz)