如何在不使用Kotlin中的集合映射的情况下复制或克隆数据对象的可变列表

如何在不使用Kotlin中的集合映射的情况下复制或克隆数据对象的可变列表,kotlin,immutablelist,mutablelist,Kotlin,Immutablelist,Mutablelist,我创建了一个可变列表的副本。当我更新复制可变列表的元素值时,原始列表元素值也发生了变化。当我使用map时,它工作得很好,但它就像整个列表的迭代,有什么方法可以不用迭代就实现吗?如何复制可变列表的元素 val array: MutableList<UserData> = ArrayList() val userData = UserData("DataOne") array.add(userData) val arrayCopy = Immutable

我创建了一个可变列表的副本。当我更新复制可变列表的元素值时,原始列表元素值也发生了变化。当我使用map时,它工作得很好,但它就像整个列表的迭代,有什么方法可以不用迭代就实现吗?如何复制可变列表的元素

    val array: MutableList<UserData> = ArrayList()
    val userData = UserData("DataOne")
    array.add(userData)

    val arrayCopy = ImmutableList.copyOf(array)// not working
    //val arrayCopy = array.toMutableList()// not working
   // val arrayCopy = array.map { it.copy() }.toMutableList()//working

    Log.i("----> array ", array[0].name)//print DataOne
    Log.i("----> arrayCopy ", arrayCopy[0].name)//print DataOne

    arrayCopy[0].name = "DataTwo"
    Log.d("----> array ", array[0].name)//print DataTwo
    Log.d("----> arrayCopy", arrayCopy[0].name) //print DataTwo
ImmutableList.copyOf会复制列表。问题是您还想复制列表中的元素。当然,要做到这一点,您必须迭代列表,但copyOf也是如此,我不明白为什么您希望它可以避免。一个稍微好一点的地图版本是


因为它只会迭代一次。

对不起,如果要转换一个元素,您必须读取/复制它一次,对于n个元素,您必须迭代n次才能获得正确的副本。 我唯一能想到的另一种方法是首先创建所需的不可变/可变列表,而不是在以后一次复制它。
希望这有助于

可能重复的@AndreyIlyunin的可能重复我在问如何在不使用map@Minn我厌倦了上面的链接,但不适合我为什么不想使用地图?谢谢,但这一个也喜欢迭代,对吗?如果列表有数千个数据,那么它需要更多的时间来绘制地图。是的。但是正如我所说的,你必须反复浏览列表来复制或者做其他任何事情。因此,为了避免重复,首先要避免复制列表。数千是一个非常小的列表,除非你的对象本身非常大。谢谢你的详细解释。有没有办法不用map或mapTo来实现?还有一件事我厌倦了mapTo和map,它们对100个项目都需要4毫秒的时间,并迭代100次
 array.mapTo(mutableListOf()) { it.copy() }