如何在Kotlin复制列表?
我使用
val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)
有没有更简单的方法?
如何在Kotlin复制列表?
我使用
val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)
有没有更简单的方法?
当前回答
就像在Java中一样:
列表:
val list = mutableListOf("a", "b", "c")
val list2 = ArrayList(list)
Map:
val map = mutableMapOf("a" to 1, "b" to 2, "c" to 3)
val map2 = HashMap(map)
假设你的目标是JVM(或Android);我不确定它是否适用于其他目标,因为它依赖于ArrayList和HashMap的复制构造函数。
其他回答
这很好。
val selectedSeries = series.toMutableList()
You can use the provided extension Iterable.toMutableList() which will provide you with a new list. Unfortunately, as its signature and documentation suggest, it's meant to ensure that an Iterable is a List (just like toString and many other to<type> methods). Nothing guarantees you that it's going to be a new list. For instance, adding the following line at the beginning of the extension: if (this is List) return this is a legitimate performance improvement (if it indeed improves the performance).
另外,由于它的名字,结果代码不是很清楚。
我更喜欢添加我自己的扩展,以确保结果,并创建一个更清晰的代码(就像我们有数组):
fun <T> List<T>.copyOf(): List<T> {
return mutableListOf<T>().also { it.addAll(this) }
}
fun <T> List<T>.mutableCopyOf(): MutableList<T> {
return mutableListOf<T>().also { it.addAll(this) }
}
注意,addAll是最快的复制方式,因为它使用本机系统。ArrayList的实现中的arraycopy。
另外,要注意这只会给你一个浅拷贝。
编辑:
你可能想要使用更通用的版本:
fun <T> Collection<T>.copyOf(): Collection<T> {
return mutableListOf<T>().also { it.addAll(this) }
}
fun <T> Collection<T>.mutableCopyOf(): MutableCollection<T> {
return mutableListOf<T>().also { it.addAll(this) }
}
val selectedSeries = listOf(*series.toTypedArray())
你可以使用ArrayList构造函数:
在尝试浅拷贝,深拷贝克隆和更多的我发现这个解决方案肯定会为你工作。
val iterator: Iterator<Object> = yourList.iterator()
while (iterator.hasNext())
newList.add(iterator.next().copy())