Jak dodać element do ArrayList w Kotlinie?


Odpowiedzi:


98

W przypadku osób właśnie migrujących z programu javaIn Kotlin Listjest domyślnie niezmienną i zmienną wersją list MutableList.

Stąd jeśli masz coś takiego:

val list: List<String> = ArrayList()

W takim przypadku nie otrzymasz add()metody, ponieważ lista jest niezmienna. Dlatego będziesz musiał zadeklarować, MutableListjak pokazano poniżej:

val list: MutableList<String> = ArrayList()

Teraz zobaczysz add()metodę i możesz dodać elementy do dowolnej listy.


5
Dziękuję Ci!
Waliłem

1
Fajnie, właśnie tego szukam. Dziękuję Ci.
Sam Chen

77

Jeśli masz kolekcję MUTABLE :

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

Jeśli masz kolekcję IMMUTABLE :

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

Zwróć uwagę, że używam valdla listy mutable, aby podkreślić, że obiekt jest zawsze ten sam, ale jego zawartość się zmienia.

W przypadku niezmiennej listy musisz to zrobić var. +=Operator tworzy nowy obiekt z dodatkową wartością.


7
robiąc +=na niezmiennej liście, wymaga skopiowania wszystkich elementów listy do nowej listy mutable, a następnie ponownego przypisania jej do aktualnej listy. Nie wiedziałem, że zadeklarowanie listy jako var. w każdym razie deklarowanie listy jako var nie jest dla mnie dobrym pomysłem.
crgarridos

1
Jeśli lista jest niezmienna, nie masz innej możliwości, jak zadeklarowanie jej jako var. Jeśli niezmienna lista jest zadeklarowana jako val, to lista nie może się nigdy zmienić. Możliwe byłoby po prostu ponowne przypisanie go do innej zmiennej.
guenhter

1
Dokładnie, nie chcę pozwolić na zmianę odniesienia do moich zmiennych. może mieć efekt uboczny w zadaniach zewnętrznych / współbieżnych. lepiej utworzyć kopię, aby wyodrębnić logikę. Ale to jest poza zakresem pytania.
crgarridos

24

Jeśli chcesz specjalnie używać java ArrayList, możesz zrobić coś takiego:

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

W przeciwnym razie odpowiedź @guenhter jest tą, której szukasz.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.