listOf în Kotlin

Creează o listă din elementele date: listOf pentru citire, mutableListOf și arrayListOf pentru o listă pe care o modifici.

Sintaxă
fun <T> listOf(vararg elemente: T): List<T>
fun <T> mutableListOf(vararg elemente: T): MutableList<T>
fun <T> arrayListOf(vararg elemente: T): ArrayList<T>

Ce face listOf

listOf(...) este modul cel mai scurt de a crea o listă: scrii elementele între paranteze, separate prin virgulă. Tipul se deduce singur: listOf(9, 10) este List<Int>. Lista rezultată este doar pentru citire.

mutableListOf(...) creează o MutableList, care are add, remove, set și operatorul lista[i] = x. arrayListOf(...) face același lucru, dar tipul declarat este clasa concretă ArrayList (pe JVM, java.util.ArrayList). În practică mutableListOf întoarce tot un ArrayList.

Pentru o listă goală trebuie să spui tipul, pentru că nu are din ce să-l deducă: mutableListOf<String>() sau val l: MutableList<String> = mutableListOf().

Parametri

Parametru Descriere
elemente Zero sau mai multe valori (vararg). Ordinea în care le scrii este ordinea din listă.

Ce returnează

List<T>, MutableList<T> sau ArrayList<T> cu elementele date.

Exemple

Exemplul 1: Listă fixă și listă modificabilă

cumparaturi este modificabilă, așa că putem adăuga, schimba și scoate elemente. zile rămâne așa cum a fost creată.

fun main() {
    val zile = listOf("luni", "marți", "miercuri")
    val cumparaturi = mutableListOf("pâine", "lapte")

    cumparaturi.add("ouă")
    cumparaturi[0] = "pâine integrală"
    cumparaturi.remove("lapte")

    println(zile)
    println(cumparaturi)
}

Rezultat

[luni, marți, miercuri]
[pâine integrală, ouă]

Exemplul 2: Listă goală cu tip explicit

Fără elemente, compilatorul nu știe tipul, așa că îl scriem între <>. Apoi adăugăm elemente într-o buclă.

fun main() {
    val pare = mutableListOf<Int>()
    for (n in 1..10) {
        if (n % 2 == 0) pare.add(n)
    }
    println("Numere pare: $pare")
    println("Câte: ${pare.size}")
}

Rezultat

Numere pare: [2, 4, 6, 8, 10]
Câte: 5

Exemplul 3: arrayListOf și tipul concret

Ambele funcții dau pe JVM un java.util.ArrayList; diferă doar tipul declarat al variabilei.

fun main() {
    val a = arrayListOf("Ana", "Mihai")
    val b = mutableListOf("Ana", "Mihai")
    a.add("Elena")

    println(a)
    println(a::class.java.name)
    println(b::class.java.name)
}

Rezultat

[Ana, Mihai, Elena]
java.util.ArrayList
java.util.ArrayList

Greșeli frecvente

  • Scrii val l = mutableListOf() fără tip: nu compilează („Not enough information to infer type variable T”).
  • Crezi că val face lista imuabilă. val lista = mutableListOf(1) doar împiedică atribuirea unei alte liste; elementele se pot schimba în continuare.
  • Amesteci tipuri: listOf(1, "doi") compilează, dar tipul devine List<Any> (sau List<Comparable<*>>) și pierzi operațiile numerice.

Comenzi înrudite

  • List: Tipul listei doar pentru citire: elemente în ordine, accesate după poziție, fără funcții de adăugare sau ștergere.
  • emptyList: Întoarce o listă, un map sau o mulțime goală, doar pentru citire; util ca valoare implicită sau rezultat „nimic găsit”.
  • buildList: Construiește o listă, un map sau o mulțime pas cu pas într-un bloc, apoi o întoarce doar pentru citire.
  • MutableList.add: Adaugă un element la finalul listei sau la o poziție dată; addAll adaugă mai multe elemente deodată.
  • arrayOf: Creează un tablou (Array) cu dimensiune fixă din elementele date; intArrayOf creează un tablou de Int primitive.