Sobes.tech
Junior

Wie funktioniert der Datentyp Map in Go?

sobes.tech KI

Antwort von AI

Map — ist eine ungeordnete Sammlung von "Schlüssel-Wert"-Paaren in Go.

Eigenschaften:

  • Schlüssel müssen vergleichbare Datentypen sein (Zahlen, Strings, Booleans, Zeiger, Kanäle, Schnittstellen, wenn der dynamische Typ vergleichbar ist, und Arrays, wenn ihre Elemente vergleichbar sind). Slices, Funktionen und andere Maps können nicht als Schlüssel verwendet werden.
  • Werte können beliebigen Datentyps sein.
  • Map ist ein Referenztyp, was bedeutet, dass eine Variable vom Typ Map einen Zeiger auf die Datenstruktur Map im Speicher enthält. Änderungen am Map über eine Variable sind in anderen Variablen sichtbar, die auf dasselbe Map verweisen.
  • Der Nullwert für eine Map ist nil. In eine nil-Map kann nicht geschrieben werden; ein Versuch führt zu einem Panic.
  • Die Größe der Map ändert sich dynamisch, wenn Elemente hinzugefügt oder entfernt werden.

Interne Implementierung: Map in Go wird als Hashtabelle (hash table) implementiert. Jeder Schlüssel wird gehasht, und das Ergebnis des Hashs wird verwendet, um die Position des zugehörigen Werts in der Tabelle zu bestimmen.

// Map erstellen
m := make(map[string]int)

// Elemente hinzufügen
m["eins"] = 1
m["zwei"] = 2

// Wert abrufen
value, ok := m["eins"] // value = 1, ok = true
value, ok = m["drei"]  // value = 0 (Nullwert für int), ok = false

// Element entfernen
delete(m, "zwei")

// Über Map iterieren (Reihenfolge nicht garantiert)
for key, value := range m {
	// ...
}

Vergleich von Maps: Zwei Maps gelten nur dann als gleich, wenn sie auf dieselbe interne Struktur verweisen, also map1 == map2 nur dann, wenn map1 und map2 dieselbe Variable sind. Der Vergleich des Inhalts eines Maps mit == ist nicht erlaubt. Um den Inhalt zu vergleichen, muss man beide Maps iterieren und ihre Elemente vergleichen.

Leistung: Zugriffs-, Hinzufügungs- und Löschoperationen in Maps haben durchschnittlich eine Komplexität von O(1). Im schlimmsten Fall (z.B. bei vielen Hash-Kollisionen) können sie O(n) in der Zeit benötigen.