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. Unilmapu 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.