Каков наилучший способ или лучшая производительность для объединения двух таблиц изменяемых в kotlin?
Привет , я хотел бы знать, какая производительность лучше всего подходит для объединения двух таблиц изменчивости
if list1.addall (list2)
with foreach
list1?.let { list1 -> list2?.let(list1::addAll) }
или карта или что-то в этом роде..?
4 ответа
Если первый список изменчив и вы хотите изменить его, просто используйте +=
оператор:
list1 += list2
Делегирует addAll
функция-член, добавляющая все элементы list2
в list1
Если вы не хотите изменять исходный список, используйте +
оператор:
val result = list1 + list2
Он объединяет два списка в третий новый список. По сравнению с созданием пустого ArrayList вручную и вызовом addAll
в этом случае этот оператор имеет преимущество, заключающееся в том, что получающийся ArrayList имеет прижим к предполагаемому размеру, поэтому он помогает сэкономить перераспределения массива хранения ArrayList.
Если оба они одного типа, то вы можете использовать плоскую карту в Котлине. Например,
val listA = mutableList<String>()
val listB = mutableList<String>()
Затем вы можете объединить их оба, как показано ниже
val mergedList = listOf(listA, listB).flatten()
или же
val mergedList = listOf(listA, listB).flatMap { it }
Таким образом, он эффективнее, удобнее для чтения и меньше кода !! Удачного кодирования с котлином!
Если list1
является изменчивым, и вы можете изменить его:
list1.addAll(list1.size, list2)
И в list1
у тебя будет list1 + list2
Если вы не можете изменить, вы можете создать ArrayList
или же LinkedList
и добавить все
val newList = ArrayList<Int>()
newList.addAll(list1)
newList.addAll(list2)
Лучшим вариантом является создание LinkedList, потому что в него всегда дешево добавлять элементы, тогда как ArrayList может иногда выделять больше места, если вы достигнете конца массива.
См. Это для получения дополнительной информации по теме Когда использовать LinkedList поверх ArrayList в Java?
Если list1
уже не LinkedList, имея в виду mutableListOf()
возвращает ArrayList, затем вы можете создать третий список следующим образом:
val newList = LinkedList<Int>()
list1.forEach {
newList += it
}
list2.forEach {
newList += it
}