在第 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]
你的第一行代码,得到一个 reference 到 SomeObject1
:
var objNew = list[0]
所以 objNew
是对 SomeObject1
的引用。现在您更改了 SomeObject1
中的一个字段:
objNew.averageChargeDischarge = "0"
所以现在 SomeObject1
有 averageChargeDischarge
等于 "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)
我有我的 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]
你的第一行代码,得到一个 reference 到 SomeObject1
:
var objNew = list[0]
所以 objNew
是对 SomeObject1
的引用。现在您更改了 SomeObject1
中的一个字段:
objNew.averageChargeDischarge = "0"
所以现在 SomeObject1
有 averageChargeDischarge
等于 "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)