Как добавить элемент в ArrayList в Котлине?

Ответы:

98

Для людей, которые только что мигрируют java, In Kotlin Listпо умолчанию является неизменной, а вызывается изменяемая версия списков MutableList.

Следовательно, если у вас есть что-то вроде:

val list: List<String> = ArrayList()

В этом случае вы не получите add()метод, поскольку список неизменяем. Следовательно, вам нужно будет объявить a, MutableListкак показано ниже:

val list: MutableList<String> = ArrayList()

Теперь вы увидите add()метод, и вы можете добавлять элементы в любой список.

Тарун
источник
5
Спасибо! Я ломал голову над этим
плюсовым
1
Хорошо, именно то, что я ищу. Спасибо.
Сэм Чен,
Какая разница между val list: MutableList<String> = ArrayList()и val list = mutableListOf<String>()?
Сэм Чен
77

Если у вас есть MUTABLE коллекция:

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

Если у вас есть коллекция IMMUTABLE :

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

обратите внимание, что я использую valдля изменяемого списка, чтобы подчеркнуть, что объект всегда один и тот же, но его содержимое изменяется.

В случае неизменяемого списка вы должны его создать var. +=Оператор создает новый объект с дополнительным значением.

Guenhter
источник
7
при выполнении +=в неизменяемом списке требуется скопировать все элементы списка в новый изменяемый список, а затем переназначить его вашему фактическому списку. Я не знал, что было бы уместно объявить ваш список как var. в любом случае, объявлять список как var - не лучшая идея для меня.
crgarridos
1
Если список неизменяемый, у вас нет другого выбора, кроме как объявить его как var. Если неизменяемый список объявлен как val, то список никогда не может измениться. Можно было бы просто переназначить его другой переменной.
Guenhter
1
Собственно, я не хочу позволять изменять ссылку на мои переменные. он может иметь побочный эффект во внешних задачах / задачах параллелизма. лучше создать копию для извлечения логики. Но это выходит за рамки вопроса.
crgarridos
24

Если вы хотите специально использовать java ArrayList, вы можете сделать что-то вроде этого:

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

В противном случае ответ @guenhter - это тот, который вы ищете.

покемзок
источник