Come aggiungere un elemento a un ArrayList in Kotlin?


Risposte:


103

Per le persone che migrano da java, In Kotlin Listè per impostazione predefinita immutabile e viene chiamata la versione modificabile di ListsMutableList .

Quindi se hai qualcosa come:

val list: List<String> = ArrayList()

In questo caso non otterrai un add()metodo in quanto list è immutabile. Quindi dovrai dichiarare un MutableListcome mostrato di seguito:

val list: MutableList<String> = ArrayList()

Ora vedrai un add()metodo e potrai aggiungere elementi a qualsiasi elenco.


5
Grazie! Ho sbattuto la testa su quel metodo plus in Arrays ...
dasfima

1
Bello, proprio quello che sto cercando. Grazie.
Sam Chen

Qual è la differenza d'uso tra val list: MutableList<String> = ArrayList()e val list = mutableListOf<String>()?
Sam Chen

79

Se hai una collezione MUTABILE :

val list = mutableListOf(1, 2, 3)
list += 4

Se hai una collezione IMMUTABILE :

var list = listOf(1, 2, 3)
list += 4

nota che uso valper l'elenco modificabile per sottolineare che l'oggetto è sempre lo stesso, ma il suo contenuto cambia.

In caso di elenco immutabile, devi farlo var. Un nuovo oggetto viene creato +=dall'operatore con il valore aggiuntivo.


7
facendo +=in una lista non modificabile, richiedi di copiare tutti gli elementi della lista in una nuova lista modificabile e poi riassegnala alla tua lista attuale. Non sapevo fosse opportuno dichiarare la tua lista come var. in ogni caso, dichiarare una lista come var non è una buona idea per me.
crgarridos

1
Se un elenco è immutabile, non hai altra opzione che dichiararlo come var. Se una lista immutabile viene dichiarata come val, allora la lista non potrà mai cambiare. Sarebbe possibile riassegnarlo a un'altra variabile.
Guenhter

1
Esatto, non voglio permettere di cambiare il riferimento delle mie variabili. può avere un effetto collaterale nelle attività esterne / simultanee. meglio creare una copia per estrarre la logica. Ma questo è fuori dalla portata della domanda.
crgarridos

24

Se vuoi usare in modo specifico java ArrayList, puoi fare qualcosa del genere:

fun initList(){
    val list: ArrayList<String> = ArrayList()
    list.add("text")
    println(list)
}

Altrimenti la risposta di @guenhter è quella che stai cercando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.