Merhaba Arkadaşlar,
Mobilhanem.com sitemiz üzerinden anlattığımız Kotlin Dersleri yazı serimizde bu dersimizde Kotlin Map kullanımını ve methodlarını anlatacağız.
Önceki yazılarımızda Set kullanımından bahsetmiştik. O dersimizi okumadıysanız öncelikle o dersimizi okumanızı tavsiye ederim. Derse gitmek için tıklayınız.
Kotlin Map
Koleksiyon oluşturmak için kullanabileceğimiz başka bir sınıf ise Map sınıfıdır. Map sınıfı kullanılarak bir nesne başka bir nesne ile ilişkilendirilebilir. Bu sınıf kullanılarak bir veriye ne şekilde erişeyeceğimizi kendimiz belirleyebiliriz. Dizi ve listelerde bulunan verilere erişmek için anahtar ifadeler kullanılır. Tek farkı ise dizi ve listelerdeki gibi anahtar ifadeler sistem tarafından oluşturulmaz. O değerleri geliştirici tarafından oluşturulur.
Map < Int, String > () : 1.değer key bilgisini vermektedir. Verilere ulaşmak için bu bilgi kullanılır. 2.değer ise map te tutulacak verinin tipini belirtir. Map yapısında veriye erişmek için istenilen veri tipinde bir anahtar ifade oluşturabilirsiniz. Key bilgisi eşsiz olmalıdır. Map te aynı olan iki anahtar ifade kullanılmaz.
Map sınıfı iki temel üzerine inşa edilmiştir :
- immutable : mapOf() ile oluşturulan yapılarda sadece okuma işlemi yapılır. Bu map’ler üzerinde oynama yapılamaz.
- mutable : mutableMapOf() ve hashMapOf() ile oluşturulan yapılarda ise üzerine ekleme, güncelleme ve silme işlemleri yapılabilir.
İlerleyen derslerde bu metodlarla ilgili detaylı bir blog yazısı yayınlayacağız. Şimdilik temel olarak bu bilgiler yeterlidir.
Map tanımlamak
fun main(args: Array<String>) { /* mapOf<Int,String> kullanılacak anahtar bilgisinin tipi Integer tutulacak verinin tipi ise String olacaktır. Anahtar değerler index yapısına benzememektedir. Anahtar değerler rastgele belirlenmiştir. */ var map1= mapOf<Int,String>(77 to "Halil Özel",55 to "Emre Mercan", 44 to "Serkan Karınca") // bu örnekte ise türlerini belirtmeden map tanımı yapılmıştır. var map2= mapOf(19.93 to true,19.97 to false, 19.95 to true) }
Map tanımlanırken iki yöntem kullanılır. Birinci yöntem Anahtar değerlerini belirterek kullanılır. Int ve String türünde değerlerle oluşturulmuş bir map örneğidir. İkinci yöntem ise veri tipini belirtmeden tanımlanan map türüdür.
Map sınıfına item eklemek
Map sınıfına eleman eklemek için put() metodu kullanılır.
// hashMapOf() metoduna ait özellikleri içerir. var new_map= mutableMapOf<Char,Int>() new_map.put('b',1993) // put metoduyla ekleme yapıldı. new_map.put('g',1995) // put metoduyla ekleme yapıldı. new_map.put('f',1997) // put metoduyla ekleme yapıldı.
mutableMapOf türünde bir map oluşturduk. Char, Int türünde değerler alan bu map sınıfına eleman eklemek için put() metodunu kullandık. Belirlemiş olduğumuz formatın dışına çıkınca hata ile karşılaşılır. Örneğin String bir değer eklemek isterseniz buna izin vermeyip hata verecektir.
Map sınıfından bir item almak
Map içerisindeki bir veriye erişmek için get() metodu kullanılmaktadır.
var map1= mapOf<Int,String>(77 to "Halil Özel",55 to "Emre Mercan", 44 to "Serkan Karınca") println("Key bilgisi 55 olan veri :"+map1.get(55)) // key değeri 55 olan verinin sonucu
Örnekte bir map oluşturduk. Oluşturulan map içerisine elemanları yazdık. Son olarak get() metodu yardımıyla eklenen key değerlerinden birinin sonucunu bulduk.
Map içerisinde verileri almanın başka bir yolu ise [] kullanıp içerisine key değeri yazmaktır.
var map1= mapOf<Int,String>(77 to "Halil Özel",55 to "Emre Mercan", 44 to "Serkan Karınca") println(map1[44]) // çıktı olarak "Serkan Karınca" veriyor.
Map içerisindeki elemanların tüm verilerini yazdırmak için key bilgisine kullanmamıza izin verilmemektedir. Key bilgileri rastgele ve karmaşık olarak verildiği için kullanılmaz. Aşağıdaki örnekte tüm elemanların değerleri ekranda nasıl gösterilir onu göreceğiz.
var map1= mapOf<Int,String>(77 to "Halil Özel", 55 to "Emre Mercan", 44 to "Serkan Karınca") for (entity in map1){ // map içindeki bulunan key-value olarak entity değişkenine atanır. println(entity) //entity içinde key-value birlikte olduğu için ekranda da beraber çıktı verir. }
Kodumuzun çıktısı ise aşağıdaki gibidir. Key – Value şeklinde bir çıktı vermektedir.
77=Halil Özel 55=Emre Mercan 44=Serkan Karınca
Map sınıfından bir item silmek
Map sınıfından bir item silmek için remove() metodu kullanılır.
var map1= hashMapOf<Int,String>(77 to "Halil Özel", 55 to "Emre Mercan", 44 to "Serkan Karınca") map1.remove(77) // key değeri 77 olan veriyi silecek. for (entity in map1){ // map içindeki bulunan key-value olarak entity değişkenine atanır. println(entity) //entity içinde key-value birlikte olduğu için ekranda da beraber çıktı verir. }
map sınıfımızdan 7 değerine sahip veriyi sildik. Ekran çıktısında ise o verinin silindiğini görebiliriz.
55=Emre Mercan 44=Serkan Karınca
Map sınıfının önemli method ve değişkenleri
size : Map sınıfının boyutunu öğrenmemiz için kullanılan bir değişkendir.
var map0= hashMapOf<String,String>("4" to "AA", "3" to "BB", "2" to "CC", "1" to "DD") println(map0.size) // map sınıfının boyutunu verir.
hasMapOf() metodu ile String türünde bir map oluşturduk. Oluşturduğumuz map’in boyutunu öğrenmek istediğimiz için size metodu kullanıldı.
contains() metodu
Map sınıfının içerisinde bir eleman var mı yok mu onu kontrol edebilmek için kullanılan bir metoddur.
var map0= hashMapOf<String,String>("4" to "AA", "3" to "BB", "2" to "CC", "1" to "DD") println(map0.contains("4")) // map içerisinde varsa true döner. println(map0.contains("44")) // map içerisinde yoksa false döner.
Map sınıfımızın içerisinde 4 key değerine sahip bir eleman var mı ? diye kontrol ettik. Kontrol sonucu true çıktı. 4 key değeri “AA” olduğu için true döndürdü. Diğer bir örnekte ise key değeri bulunmayan bir değer kullanıldı. Onun için false değeri döndürdü.
isEmpty() metodu
Map sınıfında eleman var mı yok mu diye kontrol etmemizi sağlayan bir metoddur. Map sınıfında eleman yoksa true değeri döner eğer elemana sahip ise false değeri döner.
var map00= hashMapOf<String,String>("4" to "AA", "3" to "BB", "2" to "CC", "1" to "DD") var map01= hashMapOf<Boolean,Float>() println(map00.isEmpty()) // map sınıfı boş olmadığı için false döner. println(map01.isEmpty()) // map sınıfı boş olduğu için true döner.
İki adet map sınıfı tanımlandı. Birinci map sınıfı değerleri bulunan içi boş olmayan bir map sınıfıdır. isEmpty() metodu ile karşılaştırma yapınca false değeri geriye döndürdü. İkinci map sınıfı ise boştur. Boş olduğu için sonuç olarak bize true değerini geriye döndürdü.
clear() metodu
Map sınıfın içinde bulunan değerlerin hepsini temizler. Sonuç olarak bizlere kotlin.Unit değerini verir.
var map00= hashMapOf<String,String>("4" to "AA", "3" to "BB", "2" to "CC", "1" to "DD") println(map00.clear()) // map sınıfı temizlendi.
clear() metodu ile map sınıfında bulunan tüm değerler silindi. Sonuç olarak bizlere kotlin.Unit değerini verdi.
equals() metodu
İki ya da daha fazla Map sınıfının elemanlarının karşılaştırılmasında kullanılan bir metoddur.
var map00= hashMapOf<String,String>("4" to "AA") var map01= hashMapOf<Boolean,Float>() var map02= hashMapOf<String,String>() // yeni bir map tanımlandı. map02.put("4","AA") // put metodu ile yeni değer eklendi. println(map00.equals(map01)) // aynı değerlere sahip eleman olmadığı için false değeri verdi. println(map00.equals(map02)) // aynı değerlere sahip eleman olduğu için true değeri verdi.
3 adet map sınıfı tanımladık. Tanımlanan 2 sınıfta eleman değeri aynı olduğu için karşılaştırma sonucunda true değerini aldık. Ama diğer karşılaştırmada ise boş bir map ile string türünde bir map karşılaştırıldı. Birbirinden farklı oldukları için sonuç olarak bizlere false değerini döndürdü.
Bu dersimde anlatmak istediklerim bu kadar. Bir sonraki dersimde Sınıf ve nesne kavramlarını anlatacağız.
Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.
Tüm Kotlin Dersleri için tıklayınız.
46