Как добавить элемент в 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. +=Оператор создает новый объект с дополнительным значением.


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 - это тот, который вы ищете.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.