Wie füge ich ein Element zu einer ArrayList in Kotlin hinzu?

Antworten:

100

Für Personen, die nur von migrieren java, Kotlin Listwird standardmäßig eine unveränderliche und veränderbare Version von Listen aufgerufen MutableList.

Wenn Sie also etwas haben wie:

val list: List<String> = ArrayList()

In diesem Fall erhalten Sie keine add()Methode, da die Liste unveränderlich ist. Daher müssen Sie a MutableListwie unten angegeben deklarieren :

val list: MutableList<String> = ArrayList()

Jetzt sehen Sie eine add()Methode und können jeder Liste Elemente hinzufügen.

Tarun
quelle
5
Vielen Dank! Ich habe meinen Kopf über diese Plus-Methode in Arrays geschlagen ...
dasfima
1
Schön, genau das, wonach ich suche. Vielen Dank.
Sam Chen
Was ist der Verwendungsunterschied zwischen val list: MutableList<String> = ArrayList()und val list = mutableListOf<String>()?
Sam Chen
78

Wenn Sie eine MUTABLE- Sammlung haben:

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

Wenn Sie eine IMMUTABLE- Sammlung haben:

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

Beachten Sie, dass ich valfür die veränderbare Liste verwende, um zu betonen, dass das Objekt immer dasselbe ist, aber sein Inhalt sich ändert.

Im Falle der unveränderlichen Liste müssen Sie es machen var. Ein neues Objekt wird vom +=Bediener mit dem zusätzlichen Wert erstellt.

guenhter
quelle
7
Wenn Sie +=in einer nicht veränderlichen Liste arbeiten, müssen Sie alle Elemente der Liste in eine neue veränderbare Liste kopieren und sie dann Ihrer tatsächlichen Liste neu zuweisen. Ich wusste nicht, dass es angemessen ist, Ihre Liste als zu deklarieren var. Auf jeden Fall ist es für mich keine gute Idee, eine Liste als var zu deklarieren.
Crgarridos
1
Wenn eine Liste unveränderlich ist, haben Sie keine andere Möglichkeit, sie als zu deklarieren var. Wenn eine unveränderliche Liste als deklariert ist val, kann sich die Liste nie ändern. Eine Neuzuweisung zu einer anderen Variablen wäre möglich.
Guenhter
1
Genau, ich möchte nicht zulassen, dass die Referenz meiner Variablen geändert wird. Dies kann bei externen Aufgaben / Nebenläufigkeitsaufgaben einen Nebeneffekt haben. Es ist besser, eine Kopie zu erstellen, um die Logik zu extrahieren. Dies kommt jedoch nicht in Frage.
Crgarridos
24

Wenn Sie Java ArrayList speziell verwenden möchten, können Sie Folgendes tun:

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

Andernfalls ist @guenhter Antwort diejenige, die Sie suchen.

pokemzok
quelle