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ă
valface 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 devineList<Any>(sauList<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.