你好,我想知道哪个是加入两个mutables列表
的最佳性能 if list1.addall (list2)
with foreach
list1?.let { list1 -> list2?.let(list1::addAll) }
或地图或类似的东西..?
如果第一个列表是可变的,并且要修改它,则只需使用+=
操作员:
list1 += list2
它委派给addAll
成员函数,将list2
的所有元素附加到list1
如果您不想突变原始列表,请使用+
操作员:
val result = list1 + list2
它将两个列表连接到第三个新列表中。与用手创建空阵列列表并在其上调用addAll
相比,该操作员的优势是将所得的ArrayList授予估计的尺寸,因此它有助于备用ArrayList的存储阵列重新位置。
如果list1
是可变的,您可以修改它:
list1.addAll(list1.size, list2)
,在list1
中,您将拥有list1 + list2
如果您无法修改,则可以创建ArrayList
或LinkedList
并添加所有
val newList = ArrayList<Int>()
newList.addAll(list1)
newList.addAll(list2)
如果两个类型都相同,则可以在Kotlin中使用平面地图。例如,
val listA = mutableList<String>()
val listB = mutableList<String>()
然后您可以像以下
一样合并它们val mergedList = listOf(listA, listB).flatten()
或
val mergedList = listOf(listA, listB).flatMap { it }
这样,它是有效的,更可读和更少的代码!与Kotlin!
最好的选择是创建一个linkedlist,因为将项目添加到其中总是便宜的,而如果您到达数组的末尾,则阵列列表有时可能会分配更多空间。
有关该主题何时使用linkedlist而不是Java中的ArrayList,请参阅此信息?
如果list1
还不是LinkedList,请记住mutableListOf()
返回ArrayList,则可以创建第三个列表,因此:
val newList = LinkedList<Int>()
list1.forEach {
newList += it
}
list2.forEach {
newList += it
}