【问题标题】:which is the best way or best performance to join two mutables list in kotlin?在 kotlin 中加入两个可变列表的最佳方式或最佳性能是什么?
【发布时间】:2019-03-12 14:42:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: performance kotlin mutablelist


    【解决方案1】:

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

    list1 += list2
    

    它委托给addAll成员函数,将list2的所有元素附加到list1

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

    val result = list1 + list2
    

    它将两个列表连接到第三个新列表中。与手动创建一个空的 ArrayList 并在其上调用 addAll 相比,此运算符的优势在于将生成的 ArrayList 预置为估计大小,因此有助于避免 ArrayList 的存储阵列重新分配。

    【讨论】:

      【解决方案2】:

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

      list1.addAll(list1.size, list2)
      

      list1 中,您将拥有list1 + list2

      如果不能修改可以创建ArrayListLinkedList全部添加

      val newList = ArrayList<Int>()
      
      newList.addAll(list1)
      newList.addAll(list2)
      

      【讨论】:

        【解决方案3】:

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

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

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

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

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

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

        【讨论】:

          【解决方案4】:

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

          有关主题When to use LinkedList over ArrayList in Java? 的更多信息,请参阅此处

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-10-31
            • 2016-12-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-10
            • 1970-01-01
            • 1970-01-01
            • 2021-07-06
            相关资源
            最近更新 更多