【问题标题】:Cannot add items to arrayList without inheriting old items无法在不继承旧项目的情况下将项目添加到 arrayList
【发布时间】:2021-09-15 20:49:08
【问题描述】:

所以问题是,在我将所有项目添加到我的新 arrayList2 并更改 arrayList1 中的某些内容后,它会在 arrayList2 中进行相同的更改。我的目标是基本上克隆 arraylist1 中的所有项目,并且在我更改其中的某些内容后,arraylist2 中的项目与 addAll 命令之后的项目保持相同。我的遭遇挑战示例:

arraylist2.addAll(arrayList1) 
arraylist2[0].arrayCoordinates // [0, 0] 
arraylist1[0].arrayCoordinates = arrayOf(1, 1)
arraylist2[0].arrayCoordinates // [1, 1] 

提前感谢您的帮助。

【问题讨论】:

  • 您需要一份列表的深层副本。有关这方面的一些信息可以在stackoverflow.com/questions/51480079/… 找到
  • 感谢您的建议,按照您的链接,我找到了解决问题的方法。

标签: android-studio kotlin inheritance arraylist


【解决方案1】:

为了解决这个问题,我对列表做了一个深拷贝。使用数据类命令 copy 进行复制。

sectionsSortedFinal = sectionsSorted.map { it.copy() } as ArrayList<CutomObj>

但不幸的是,这个命令并没有完全进行深度复制。例如,我有一个数据类。

data class User(val name: String, val age: Int, val namesOfCarsOwned: ArrayList<String>)

它只会深拷贝名称和年龄。 要解决此问题,需要在类中创建自定义复制功能:

fun copy(name: String = this.name,
         age: Boolean = this.age, 
         grammarSuggestions: ArrayList<String> = ArrayList(this.grammarSuggestions)) 
         = User(name, age, grammarSuggestions)

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多