Sobes.tech
Junior

Go'da Map veri tipi nasıl çalışır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Map — Go dilinde sıralanmamış "anahtar-değer" çiftleri koleksiyonudur.

Özellikler:

  • Anahtarlar karşılaştırılabilir veri türleri olmalıdır (sayılar, dizgeler, booleanler, göstericiler, kanallar, arayüzler, eğer dinamik tür karşılaştırılabilir ise, ve elemanları karşılaştırılabilir olan diziler). Dilim (slice), fonksiyonlar ve diğer mapler anahtar olarak kullanılamaz.
  • Değerler herhangi bir veri türünde olabilir.
  • Map, referans tipi olduğu için, map türünde bir değişken, bellekteki map veri yapısına işaret eden bir gösterici içerir. Bir değişken aracılığıyla yapılan değişiklikler, aynı map’e referans eden diğer değişkenlerde de görülecektir.
  • Map için sıfır değer nil'dir. nil map’e yazılamaz; denemek panik ile sonuçlanır.
  • Map’in boyutu, eleman ekleme veya silme işlemleriyle dinamik olarak değişir.

İç yapısı: Go’daki map, bir hash tablosu (hash table) olarak uygulanır. Her anahtar hashlenir ve hash sonucu, ilişkili değerin tablodaki konumunu belirlemek için kullanılır.

// Map oluşturma
m := make(map[string]int)

// Eleman ekleme
m["bir"] = 1
m["iki"] = 2

// Değer alma
value, ok := m["bir"] // value = 1, ok = true
value, ok = m["üç"]  // value = 0 (sıfır değeri int için), ok = false

// Eleman silme
delete(m, "iki")

// Map üzerinde yineleme (sıra garanti edilmez)
for key, value := range m {
	// ...
}

Map karşılaştırması: İki map, yalnızca aynı iç yapıya işaret ediyorsa eşit kabul edilir, yani map1 == map2 yalnızca map1 ve map2 aynı değişkense geçerlidir. Map’in içeriği == operatörüyle karşılaştırılamaz. İçeriği karşılaştırmak için her iki map üzerinde yineleme yapıp elemanlarını karşılaştırmak gerekir.

Performans: Map’te erişim, ekleme ve silme işlemleri ortalama O(1) zaman karmaşıklığına sahiptir. En kötü durumda (örneğin, çok sayıda hash çakışması varsa) O(n) zaman alabilirler.