Junior
Jaký je rozdíl mezi HashMap a LinkedList?
sobes.tech AI
Odpověď od AI
- 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
}
- 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) |