如何在Kotlin中将项目添加到ArrayList?


Answers:


98

对于刚从中迁移的人javaKotlin List默认情况下,In是不可变的且可变的Lists版本MutableList

因此,如果您有类似以下内容:

val list: List<String> = ArrayList()

在这种情况下,add()由于list是不可变的,因此您将不会获得方法。因此,您必须声明a MutableList,如下所示:

val list: MutableList<String> = ArrayList()

现在,您将看到一个add()方法,可以将元素添加到任何列表中。


5
谢谢!我一直在为Arrays中的plus方法而
烦恼

1
很好,正是我要的东西。谢谢。
山姆陈

val list: MutableList<String> = ArrayList()和之间有什么用途区别val list = mutableListOf<String>()
Sam Chen

77

如果您有MUTABLE集合:

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

如果您有IMMUTABLE集合:

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

请注意,我使用val可变列表来强调该对象始终是相同的,但是其内容会发生变化。

如果是不可变的列表,则必须添加var+=操作员将使用附加值创建一个新对象。


7
这样做+=的一个不可变列表,需要对列表中的所有元素复制可变的新列表,然后将其重新分配给您的实际列表。我不知道将您的清单声明为是合适的var。无论如何,声明一个变量列表对我来说不是一个好主意。
crgarridos

1
如果列表是不可变的,则除了将其声明为之外,您没有其他选择var。如果将不可变列表声明为val,则该列表将永远无法更改。只需将其重新分配给另一个变量即可。
guenhter

1
确实,我不想允许更改变量的引用。它可能在外部/并发任务中产生副作用。最好创建一个副本以提取逻辑。但这超出了问题的范围。
crgarridos

24

如果要专门使用java ArrayList,则可以执行以下操作:

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

否则,@ guenhter答案就是您要寻找的答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.