Як додати елемент до ArrayList у Котліні?


Відповіді:


98

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

Отже, якщо у вас є щось на зразок:

val list: List<String> = ArrayList()

У цьому випадку ви не отримаєте add()метод, оскільки список незмінний. Отже, вам доведеться оголосити, 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.