Sobes.tech
Junior

Kako funkcioniše tip podataka Map u Go?

sobes.tech АИ

Одговор од АИ

Mapa — to neusmerena kolekcija parova "ključ-vrednost" u Go.

Karakteristike:

  • Ključevi moraju biti uporedivi tipovi podataka (brojevi, stringovi, booleani, pokazivači, kanali, interfejsi, ako je dinamički tip uporediv, i nizovi ako su njihovi elementi uporedivi). Nije dozvoljeno koristiti slice, funkcije ili druge mape kao ključeve.
  • Vrednosti mogu biti bilo kog tipa podataka.
  • Mapa je referentni tip, što znači da promenljiva tipa map sadrži pokazivač na strukturu podataka mape u memoriji. Promene na mapi putem jedne promenljive biće vidljive putem drugih promenljivih koje se odnose na istu mapu.
  • Nulta vrednost za mapu je nil. U nil mapu ne može se pisati; pokušaj će izazvati paniku.
  • Veličina mape se dinamički menja kako se dodaju ili uklanjaju elementi.

Unutrašnja implementacija: Mapa u Go je implementirana kao hash tabela (hash table). Svaki ključ se hash-uje, a rezultat hash-a se koristi za određivanje položaja povezane vrednosti u tabeli.

// Kreiranje mape
m := make(map[string]int)

// Dodavanje elemenata
m["jedan"] = 1
m["dva"] = 2

// Dobijanje vrednosti
value, ok := m["jedan"] // value = 1, ok = true
value, ok = m["tri"]  // value = 0 (nulta vrednost za int), ok = false

// Brisanje elementa
delete(m, "dva")

// Iteracija kroz mapu (redosled nije garantovan)
for key, value := range m {
	// ...
}

Poređenje mapa: Dve mape se smatraju jednakim samo ako se odnose na istu internu strukturu, tj. map1 == map2 samo ako su map1 i map2 ista promenljiva. Nije dozvoljeno poređenje sadržaja mape pomoću operatora ==. Za poređenje sadržaja, potrebno je iterirati kroz obe mape i uporediti njihove elemente.

Performanse: Operacije pristupa, dodavanja i brisanja u mapu imaju prosečnu složenost O(1). U najgorem slučaju (npr. sa mnogo sudara heša) mogu trajati O(n) vremena.