#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:
Эти два варианта не совсем одинаковы: первый просто вставляет элемент в начало существующего изменяемого списка, а второй создает новый список, а затем преобразует его в другой новый изменяемый список.
Я думаю, что если вы согласны с изменением существующего списка, вам следует предпочесть первый вариант, потому что он требует намного меньше памяти, чем второй.