在第 0 个位置的 ArrayList 中添加新值的问题

Issue in adding new value in ArrayList at 0th position

我有我的 model/pojo class 的 ArrayList。我在 logcat 中得到的值低于以下值:

BatteryDetailsHistory(dates=10 01 2022, dateNumber=10, chargeOverTime=94, avgTemperature=21.9385, averageChargeDischarge=-2.1234)

现在,在特定情况下,我必须在此 model/pojo 的数组列表中的第 0 个位置添加对象 BatteryDetailsHistory 的一个值。

所以,我做了如下操作:

var objNew = list[0]
objNew.averageChargeDischarge = "0"
list.add(0, objNew)

但在那之后我得到的是如下:

BatteryDetailsHistory(dates=10 01 2022, dateNumber=10, chargeOverTime=94, avgTemperature=21.9385, averageChargeDischarge=0)

BatteryDetailsHistory(dates=10 01 2022, dateNumber=10, chargeOverTime=94, avgTemperature=21.9385, averageChargeDischarge=0)

你可以看到我已经尝试将 averageChargeDischarge 的值更改为 0 但是在将 pojo/model 的新对象添加到我的 list 之后,我得到了列表中的两个数据,其中 averageChargeDischarge[= 的值为 0 14=]

可能是什么问题?

发生这种情况是因为您正在处理一个对象。

假设您有一个包含 SomeObject 实例的列表,我们称之为 SomeObject1:

[SomeObject1]

你的第一行代码,得到一个 referenceSomeObject1:

var objNew = list[0]

所以 objNew 是对 SomeObject1 的引用。现在您更改了 SomeObject1 中的一个字段:

objNew.averageChargeDischarge = "0"

所以现在 SomeObject1averageChargeDischarge 等于 "0"。 然后你将那个 same 对象插入回列表中:

list.add(0, objNew)

现在您的列表如下所示:

[SomeObject1, SomeObject1]

您从来没有对象的两个实例,您总是只有其中一个。这就是它出现两次的原因。

如果您只想更改列表中第一个对象的 属性,您可以通过索引访问它:

 list[0].averageChargeDischarge = "0"

如果您想在列表中保留第一个对象及其初始数据,则需要复制它,例如创建一个新对象:

// If object(BatteryDetailsHistory) is a data class
val objNew = list[0].copy(averageChargeDischarge = "0")
list.add(0, objNew)

// If object(BatteryDetailsHistory) is not a data class
val objOld = list[0]
val objNew = BatteryDetailsHistory(/*copy all properties from objOld*/, averageChargeDischarge = "0")
list.add(0, objNew)