Dart Collections: Datenverwaltung mit List, HashSet und HashMap
Mein Einstieg in Collections – Datenstrukturen
Heute habe ich mich in die Datenstrukturen von Dart vertieft: List, HashSet und HashMap. Anfangs dachte ich „Ist das nicht alles dasselbe?“, aber jede hat ihre eigenen Einsatzfälle.
Live-Demo: Beispiele zu Dart Collections
Probieren Sie den Einsatz von List, HashSet und HashMap interaktiv aus:
List – klassische Arrays
Listen sind die Datenstruktur, die wir am besten kennen. Sie ähneln Arrays aus anderen Sprachen. Jedes Element hat einen Index (beginnend bei 0) und die Reihenfolge bleibt erhalten.
Meine ersten Versuche mit Listen
void main() {
List<int> numbers = [3, 4, 5];
List<String> names = ["Ahmet", "Mehmet", "Selda"];
List<double> ratios = [3.2, 3.3, 3.5];
print(numbers); // [3, 4, 5]
print(names); // [Ahmet, Mehmet, Selda]
print(ratios); // [3.2, 3.3, 3.5]
}Daten hinzufügen und entfernen
// Adding
numbers.add(32);
names.add("New name");
ratios.add(3.4);
// Insert at specific position
numbers.insert(0, 100); // Adds to beginning
// Update
numbers[0] = 50; // Change first element
// Remove
numbers.remove(50); // Remove by value
numbers.removeAt(0); // Remove by indexAuf Elemente zugreifen
print(numbers[0]); // First element
print(numbers.first); // First element
print(numbers.last); // Last element
print(numbers.length); // Number of elements
print(numbers.isEmpty); // Is it empty?
print(numbers.isNotEmpty); // Is it not empty?Nützliche Methoden von List
List<int> numbers = [5, 2, 8, 1, 9];
numbers.sort(); // Sort: [1, 2, 5, 8, 9]
numbers.reversed; // Reverse
numbers.contains(5); // Does it contain 5? true
numbers.indexOf(8); // Index of 8? 2
numbers.clear(); // Clear allHashSet – eindeutige Werte
HashSet ist eine Struktur, die keine doppelten Werte zulässt. Fügen Sie denselben Wert zweimal hinzu, bleibt nur einer erhalten.
Warum HashSet?
Stellen Sie sich vor, Sie sammeln E-Mail-Adressen von Nutzern. Dieselbe Adresse soll nicht doppelt vorkommen. Dafür ist HashSet perfekt.
import 'dart:collection';
void main() {
HashSet<String> emails = HashSet();
emails.add("[email protected]");
emails.add("[email protected]");
emails.add("[email protected]"); // Won't be added, already exists
print(emails); // {[email protected], [email protected]}
print(emails.length); // 2
}Eigenschaften von HashSet
HashSet<int> numbers = HashSet();
numbers.add(5);
numbers.add(3);
numbers.add(5); // Won't be added
print(numbers.contains(3)); // true
print(numbers.length); // 2
numbers.remove(3);
print(numbers); // {5}List im Vergleich zu HashSet
| Merkmal | List | HashSet |
|---|---|---|
| Duplikate | Erlaubt | Nicht erlaubt |
| Reihenfolge | Bleibt erhalten | Keine garantierte Reihenfolge |
| Zugriff | Über den Index | Kein Index |
| Geschwindigkeit | Langsamer bei der Suche | Schneller bei der Suche |
HashMap – Schlüssel-Wert-Paare
HashMap speichert Daten als Schlüssel-Wert-Paare. Wie ein Wörterbuch: das Wort (Schlüssel) und seine Bedeutung (Wert).
Erstes Beispiel für HashMap
void main() {
HashMap<String, int> ages = HashMap();
ages["Ahmet"] = 25;
ages["Mehmet"] = 30;
ages["Selda"] = 28;
print(ages["Ahmet"]); // 25
print(ages); // {Ahmet: 25, Mehmet: 30, Selda: 28}
}Praktisches Beispiel: Produktpreise
HashMap<String, double> prices = HashMap();
prices["Bread"] = 5.50;
prices["Milk"] = 12.00;
prices["Cheese"] = 45.00;
print("Bread price: ${prices["Bread"]} TL");
// Update
prices["Bread"] = 6.00;
// Check if exists
if (prices.containsKey("Milk")) {
print("Milk is available");
}
// Remove
prices.remove("Cheese");Methoden von HashMap
HashMap<String, int> scores = HashMap();
scores["Math"] = 85;
scores["Physics"] = 90;
scores["Chemistry"] = 78;
print(scores.keys); // Keys: (Math, Physics, Chemistry)
print(scores.values); // Values: (85, 90, 78)
print(scores.length); // 3
print(scores.isEmpty); // false
scores.clear(); // Clear allWann verwenden Sie was?
List verwenden:
- Wenn die Reihenfolge wichtig ist
- Wenn Sie über den Index zugreifen müssen
- Wenn Duplikate erlaubt sind
- Einkaufsliste, Aufgabenliste usw.
HashSet verwenden:
- Wenn Sie eindeutige Werte brauchen
- Wenn die Reihenfolge egal ist
- Wenn Sie schnell suchen müssen
- E-Mail-Liste, eindeutige IDs, Tags usw.
HashMap verwenden:
- Wenn Sie Schlüssel-Wert-Paare brauchen
- Wenn Sie über den Schlüssel zugreifen müssen
- Einstellungen, Übersetzungen, Benutzerdaten usw.
Echtes Flutter-Beispiel
Produktliste mit List
List<String> products = ["Apple", "Banana", "Orange"];
ListView.builder(
itemCount: products.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(products[index]),
);
},
)Benutzereinstellungen mit HashMap
HashMap<String, bool> settings = HashMap();
settings["notifications"] = true;
settings["darkMode"] = false;
settings["autoSave"] = true;
SwitchListTile(
title: Text("Notifications"),
value: settings["notifications"] ?? false,
onChanged: (value) {
settings["notifications"] = value;
},
)Was habe ich heute gelernt?
- List: Geordnet, lässt Duplikate zu, Zugriff über den Index
- HashSet: Eindeutige Werte, keine garantierte Reihenfolge, schnelle Suche
- HashMap: Schlüssel-Wert-Paare, Zugriff über den Schlüssel
Morgen sehe ich mir try-catch sowie async und await an. Fehlerbehandlung und asynchrone Abläufe sind in Flutter sehr wichtig!
Lernressourcen
- Die offizielle Dokumentation von Dart
- Mein eigener Experimentiercode
- Beispiele auf StackOverflow
Ich hoffe, dieser Artikel war nützlich. Schreiben Sie gern einen Kommentar, wenn Sie Fragen haben!
Kontakt: