Sobes.tech
Senior

Czym jest mapa w Go, jak jest zbudowana od środka, czym jest kolizja i jak z nią walczyć?

sobes.tech AI

Odpowiedź od AI

W Go map jest wbudowanym typem danych do przechowywania par klucz-wartość z szybkim dostępem. Wewnątrz map zaimplementowany jest mechanizm tablicy haszującej.

Budowa wewnętrzna:

  • Klucz jest haszowany na wartość całkowitą.
  • Hash określa indeks kosza (bucket), w którym przechowywane są pary.
  • Każdy bucket zawiera kilka par klucz-wartość.

Kolizja — sytuacja, gdy różne klucze mają ten sam hash i trafiają do tego samego bucketu. Aby sobie z tym poradzić, Go używa:

  • Przechowywania wielu par w jednym bucketcie.
  • Gdy występuje dużo kolizji, następuje ponowne rozłożenie (rehash) z zwiększeniem liczby bucketów.

To pozwala zachować szybki dostęp do elementów nawet przy kolizjach.

Przykład użycia mapy:

m := make(map[string]int)
m["apple"] = 5
fmt.Println(m["apple"]) // 5

Tak więc, map w Go to efektywna struktura dla tablic asocjacyjnych z wewnętrzną optymalizacją minimalizującą wpływ kolizji.