Каков наилучший способ добавить элемент в начало списка в Kotlin

#list #arraylist #kotlin

#Список #arraylist #kotlin

Вопрос:

Если у меня есть список, подобный этому

  var foo = mutableListOf("John", "Wayne")
  

и если я хочу добавить элемент в начало списка, пока я думаю о двух вариантах.

Первый: foo.add(0, "Twyla")

Второй: foo = (mutableListOf("Twyla") foo).toMutableList()

Я не о том, как два вышеупомянутых варианта работают с точки зрения производительности, но каков рекомендуемый способ в целом?

Комментарии:

1. Вы могли бы использовать реализацию очереди, например LinkedList ?

2. Да, я могу, но, допустим, по другой причине я избегаю использования LinkedList.

3. Afaik, в Kotlin нет поддержки API (по крайней мере, в версии v1.3), как в Scala, которая позволяет добавлять элемент в список.

4. Если вы хотите изменить существующий список, то add(0, ) это, вероятно, лучший способ. Его производительность будет зависеть от реализации списка, но если это тот, который допускает эффективную вставку (например, LinkedList), то add() , вероятно, сделает это. (Если производительность действительно важна, убедитесь, что вы используете LinkedList, или измените код так, чтобы вам нужно было добавлять только в конце списка.)

Ответ №1:

Вы можете использовать метод add(index, value).

 fun main() {    
    val list1: MutableList<Int> = mutableListOf(2,3,4)
    println(list1.toString())

    list1.add(0, 1)
    println(list1.toString()) 
}

Output: 
  [2, 3, 4]
  [1, 2, 3, 4]
  

Ответ №2:

Эти два варианта не совсем одинаковы: первый просто вставляет элемент в начало существующего изменяемого списка, а второй создает новый список, а затем преобразует его в другой новый изменяемый список.

Я думаю, что если вы согласны с изменением существующего списка, вам следует предпочесть первый вариант, потому что он требует намного меньше памяти, чем второй.