Kotlin’de Dizilerin dışında, bazı koleksiyon yapıları mevcuttur.

List Yapıları  \color{white}{\to}  Değiştirilebilir Listeler, Değiştirilemez Listeler
Map yapıları  \color{white}{\to}  Değiştirilebilir Map, Değiştirilemez Map
Set yapısı  \color{white}{\to} Değiştirilebilir Set, Değiştirilemez Set

başlıkları altında bu koleksiyon yapılarını inceleyeceğiz. 

List Yapıları Nedir Ne İşe Yarar?

Kotlin’de list yapıları, dizilerle benzer nitelikler taşır. Aradaki tek fark dizi yapısının bir eleman sayısı olmasıdır. List yapısında ise eleman sayısı yoktur. List yapıları, değiştirilemez ve değiştirilebilir list yapıları olmak üzere ikiye ayrılır.

Değiştirilemez List Yapısı: Immutable yani değiştirilemez list yapıları adından da anlaşılacağı üzere üzerine herhangi bir eleman eklenemez, güncellenemez veya silinimezdir. 

fun main(args: Array<String>)
{
    var liste = listOf("Barış", 52, null, true) 
    // null değer alabilir.
    println(liste.size) // listenin boyutu 4'tür.
    println(liste.get(0)) // 0. elemanı getir
    println(liste[0]) // 0. elemanı getir
    
    println("*********")
    
    //listenin tamamını yazdır
    for(i in liste)
    {
        println(i)
    }
    
      println("*********")
    
    var s1 = liste.get(1) as Int //1. elemanı int olarak bana getir.
    
    //Eğer immutablelisttemizin null değer almasını istemiyorsak;
    
    var liste2 = listOfNotNull("Barış", 52, null, true) // null değer mevcut ancak bunu liste içinde tutmayacak
    println(liste2.size) // 3 değerini döndürdü çünkü null değerini liste içerisinde tutmuyoruz.
    
    for(i in liste2)
    {
        println(i) // görüldüğü gibi burada da null değerini atasak bile liste içerisinden siliniyor.
    } 
}


Değiştirilebilir List Yapısı: 
Mutable, yani değiştirilebilir list sayesinde list içerisinde değer atayabilir, güncelleyebilir ya da silebiliriz.

fun main(args: Array<String>)
{
    var liste = ArrayList<Int>(10) // Burada başlangıç kapasitesi belirledim ancak belirlemek zorunda değiliz
    
    var liste2 = mutableListOf<Any?>("Barış", null, 52, true)
    liste2.add("Andrei") // eleman ekleme --Ekleme--
    liste2.add("Lavi")
    
    liste2.remove("Barış") // Barış içeren stringi kaldır **Silme**
    liste2.removeAt(1) // 1. indisli elemanı kaldır **Silme**
    liste2.set(3, "Dünya") // 3. indisli elemanı Dünya yap **Güncelleme**
}

Map Yapıları Nedir Ne İşe Yarar?

Map yapıları da list yapıları gibidir. Ancak, map yapılarında elemanların indislerini bir sayı değil, herhangi bir şey olarak belirleyebiliriz. Elemanların indisleri “Key” olarak adlandırılır. Değiştirilemeyen ve değiştirilebilir map yapıları olmak üzere ikiye ayrılır.

Değiştirilemez Map Yapıları: Bu map yapılarında sonradan eleman eklenemez, silinemez veya değiştirilemez. 

fun main(args: Array<String>)
{
    var mapOrnegi = mapOf<Int, String>(1 to "Barış", 2 to "Andrei", 3 to "Lavi")
    
    println("Keyi 1 olan değer : " + mapOrnegi.get(3))
    println("Keyi 2 olan değer : " + mapOrnegi[2])
    
    println("********")
    
  
    for(i in mapOrnegi)  // key = value olarak yazdırmak istiyorsak
    {
        println(i)
    }
    
    println("********")
    
    for(i in mapOrnegi)
    {
        println(i.key) // sadece keyleri yazdırmak istiyorsak
    }
    
    println("********")
    
    for(i in mapOrnegi)
    {
        println(i.value) // sadece değerleri yazdırmak istiyorsak
    }
    
    if(mapOrnegi.containsValue("Barış")) //Map içerisinde bir şey aramak istiyorsak
    {
        println("Bu map Barış içerir..")
    }    
}


Değiştirilebilir Map Yapıları: Bu map yapılarında değerler eklenebilir, silinebilir veya değiştirilebilir. Eğer aynı keyde birden fazla değer atandıysa, keye en son atanan değer geçerli olur. Ancak Map’in boyutu artar.

fun main(args: Array<String>)
{
    var mapOrnegi = mutableMapOf<String, String>("1" to "Barış", "2" to "Andrei", "3" to "Lavi") // String Key'li String içeren Map
    
    mapOrnegi.put("5", "Yunus") // "5" string tipli indisli "Yunus" verisini ekle **Ekleme**
    mapOrnegi.set("2", "Hakan") // "2" keyli elemanı "Hakan" ile değiştir **Düzenleme**
    mapOrnegi.remove("3") // "3" keyli elemanı sil **Silme** 
}

Set Yapısı

Set yapıları adından da anlaşılacağı üzere küme yapılarıdır. Değiştirilebilir map yapılarında aynı keyde birden fazla atama yaptığımızda en son atanan değer geçerli olup, map’in boyutu da artıyordu. Ancak set yapısında birden fazla aynı eleman atasak bile boyutu değişmez. Set yapısı da değiştirilebilir ve değiştirilemez olarak ikiye ayrılır.

Değiştirilemez Set Yapısı: Bu set yapısında elemanlar güncellenemez, silinemez veya eklenemez. 

Değiştirilebilen Set Yapısı: Bu set yapısında ise elemanlar güncellenebilir, silinebilir veya eklenebilir.

fun main(args: Array<String>)
{
    var setOrnegi1 = setOf(null, "Dünya", "Barış", 102) // Değiştirilemez set yapısı
    
    var setOrnegi2 = mutableSetOf(null, "Dünya", "Barış", 102) // Değiştirilebilir set yapısı
    var setOrnegi3 = mutableSetOf<Int>(1,9,5,33)
    
    println(setOrnegi3.size) // 4 elemanımız var
    
    setOrnegi3.add(22)
    
    println(setOrnegi3.size) // 22 elemanını ekledik ve 5 tane elemanımız oldu
    
    setOrnegi3.add(5) // 5 elemanını ekledik, dikkat edilirse küme içerisinde zaten var
    
    println(setOrnegi3.size) /* 5 elemanını eklememize rağmen kümenin boyutu değişmedi, çünkü kümede zaten mevcut.*/
}