1

你好我想知道加入两个可变列表的最佳性能是什么

if list1.addall (list2) with foreach list1?.let { list1 -> list2?.let(list1::addAll) }

或地图或类似的东西..?

4

4 回答 4

2

如果第一个列表是可变的并且您想修改它,只需使用+=运算符:

list1 += list2

它委托给addAll成员函数,将所有元素附加list2list1

如果您不想改变原始列表,请使用+运算符:

val result = list1 + list2

它将两个列表连接到第三个新列表中。与手动创建一个空的 ArrayList 并调用addAll它相比,此操作符具有将生成的 ArrayList 预置为估计大小的优点,因此有助于节省 ArrayList 的存储阵列重新分配。

于 2019-03-12T23:26:07.263 回答
1

如果list1是可变的,您可以修改它:

list1.addAll(list1.size, list2)

list1会有list1 + list2

如果您无法修改,您可以创建ArrayListLinkedList添加所有

val newList = ArrayList<Int>()

newList.addAll(list1)
newList.addAll(list2)
于 2019-03-12T20:03:15.153 回答
1

如果它们都属于同一类型,那么您可以在 Kotlin 中使用平面地图。例如,

val listA = mutableList<String>()
val listB = mutableList<String>()

然后你可以像下面这样合并它们

val mergedList = listOf(listA, listB).flatten()

或者

val mergedList = listOf(listA, listB).flatMap { it }

这样它就更高效、更易读、代码更少!!使用 kotlin 编码愉快!

于 2021-05-13T15:24:55.210 回答
-1

最好的选择是创建一个 LinkedList,因为向其中添加项目总是很便宜,而 ArrayList 有时可能会在到达数组末尾时分配更多空间。

有关主题何时在 Java 中使用 LinkedList 而不是 ArrayList的更多信息,请参阅此内容?

如果list1还不是 LinkedList,请记住mutableListOf()返回一个 ArrayList,那么您可以像这样创建第三个列表:

 val newList = LinkedList<Int>()
    list1.forEach {
        newList += it
    }

    list2.forEach {
        newList += it
    }
于 2019-03-12T15:25:02.237 回答