Junior
Aký je rozdiel medzi HashMap a LinkedList?
sobes.tech AI
Odpoveď od AI
- 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
}
- 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) |