gpt4 book ai didi

java - HashMap 在 Android 中不稳定

转载 作者:行者123 更新时间:2023-11-29 04:41:37 25 4
gpt4 key购买 nike

您好,我想在 HashMap 中保存一个对象(如果它不存在),如果它存在,我想用新数据控制它的值。如果数据发生变化,我想做某事。别的。但是每当我尝试比较新数据和哈希值时,我发现它们每次都是相同的。我该如何处理这个问题。有代码:

BluetoothLeDevice deviceLe;
private Map<String, byte[]> mMacMap;
byte [] integer0 =new byte[4];
byte[] tempInteger0=new byte[4];

public void addSensor(String macId, BluetoothLeDevice deviceLe) {
byte [] addSensorrecord=deviceLe.getScanRecord();
int j=0;
for(int i=15;i<19;i++)
{
integer0 [j]=addSensorrecord[i];
j++;
}
if (mMacMap.containsKey(macId)) {
tempInteger0 = mMacMap.get(macId);

if(!integer0 .equals(tempInteger0))
{
mMacMap.remove(macId);
mMacMap.put(macId, integer0 );
new SendBLEData().execute(deviceLe);
}

} else {
final byte [] LocalInteger0=new byte[4];
int t=0;
for(int i=15;i<19;i++)
{
LocalInteger0[t]=addSensorrecord[i];
t++;
}
mMacMap.put(macId, LocalInteger0);
new SendBLEData().execute(deviceLe);
}
}

最佳答案

我猜你的问题出在这里:

!Integer0.equals(tempInteger0))

认为您想比较两个数组;并且您会惊讶地发现它们……一直都是不同的。

您的问题是:数组上的 equals() 不会对数组内容进行比较。换句话说:如果您正在比较的数组是相同的,则此对 equals() 的调用只会给出“true”,例如:

  int a[] = { 1 };
int b[] = a;
int c[] = { 1 };

这里:

 a.equals(b) --> true

但是

 a.equals(c) --> false

当比较数组内容很重要时,您应该改用 ArrayList。因为当两个 ArrayList 对象包含完全相同的相等元素时,它们是相等

您会看到:您正在对数组使用等于来在您的代码中做出决定。所以,你要么换成ArrayLists;或按照用户 hamsty 的建议使用 Arrays.equals()。

关于java - HashMap 在 Android 中不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38998250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com