如何在 Kotlin 中向 ArrayList 添加元素?

123

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

6个回答

155

对于刚从java迁移到Kotlin的人,List默认是不可变的,可变版本的列表称为MutableList

因此,如果你有这样的代码:

val list: List<String> = ArrayList()

在这种情况下,你将无法获得 add() 方法,因为列表是不可变的。因此,你需要像下面这样声明一个 MutableList

val list: MutableList<String> = ArrayList()

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


8
谢谢!我一直在为数组中的加法方法苦苦思索... - dasfima
1
很好,正是我所需要的。谢谢。 - Sam Chen
val list: MutableList<String> = ArrayList()val list = mutableListOf<String>() 之间的用法差异是什么? - Sam Chen
1
实际上,自 Kotlin 1.1 版本以来,ArrayList 是可变的:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-array-list/ - bk138

93

如果你有一个MUTABLE(可变的)集合:

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

如果你有一个不可变的集合:

var list = listOf(1, 2, 3)
list += 4
请注意,我使用val来表示可变列表的对象始终相同,但其内容会发生更改。
对于不可变列表,您需要将其设置为var。使用+=运算符创建带有附加值的新对象。

7
在一个不可变列表中执行 += 操作需要将列表的所有元素复制到一个新的可变列表中,然后将其重新赋值给实际的列表。我不知道将列表声明为 var 是合适的。无论如何,对我来说,将列表声明为 var 不是一个好主意。 - crgarridos
1
如果一个列表是不可变的,你只有将其声明为 var 的选项。如果一个不可变的列表被声明为 val,那么这个列表就永远不能改变了。只有将它重新分配给另一个变量才是可能的。 - guenhter
1
我不想允许更改我的变量的引用,因为这可能会对外部/并发任务产生副作用。最好创建一个副本来提取逻辑。但这超出了问题的范围。 - crgarridos

36

如果你想特别使用Java的ArrayList,那么可以像这样做:

fun initList(){
    val list: ArrayList<String> = ArrayList()
    list.add("text")
    println(list)
}
否则 @guenhter 的回答就是你要找的答案。

10
您可以使用+=来向数组中添加新项,例如:
private var songs: Array<String> = arrayOf()
   fun add(input: String) {
        songs += input
    }

3
这是一个 Kotlin 中添加一个项目到 String ArrayList 的代码示例。
val arrayList: ArrayList<String> = ArrayList()
arrayList.add("January")

0
我所做的是在ViewModel中存储字符串列表,并在Fragment中访问它。我创建了一个对话框Fragment,并在对话框中编辑字符串,然后使用导航组件将字符串值返回到主Fragment。当进入对话框Fragment时,ViewModel会被清除,其中包括列表。因此,当我将列表传递给Adapter时,它实际上不会显示任何内容并且会引用错误。另外,在将列表传递给Adapter时,请添加"toList()"。`adapter.subMItList(viewModel.lableList.toList())`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接