Java Hashmap get(key)即使在值存在时也返回null
我正在尝试将数据保存在哈希映射中并检索它。与键相对应的值存在,并且仍然返回null。我还实现了equals()和hashCode()方法Java Hashmap get(key)即使在值存在时也返回null,java,android,null,hashmap,Java,Android,Null,Hashmap,我正在尝试将数据保存在哈希映射中并检索它。与键相对应的值存在,并且仍然返回null。我还实现了equals()和hashCode()方法 ArrayList<Friends> friendsArrayList = new ArrayList<Friends>(); HashMap<Friends,ArrayList<FriendDetails>> friendDetailsHashMap = new HashMap<Friends, Arra
ArrayList<Friends> friendsArrayList = new ArrayList<Friends>();
HashMap<Friends,ArrayList<FriendDetails>> friendDetailsHashMap = new HashMap<Friends, ArrayList<FriendDetails>>();
int mSelectedIndex = 0;
...
Friends f = friendsArrayList.get(mSelectedIndex);
ArrayList<MeterGroups> temp2 = friendDetailsHashMap.get(mp); //<== This is where it returns null
问题在于你在Friends中的.equals方法 比较字符串时,请使用.equals而不是== 最后一行应该是这样的:
return this.friendId.equals(other.friendId);
问题在于你在Friends中的.equals方法 比较字符串时,请使用.equals而不是== 最后一行应该是这样的:
return this.friendId.equals(other.friendId);
您的
equals
实现仅使用friendId
。您的hashCode
实现同时使用friendName
和friendId
。因此,可以有两个具有不同哈希代码的相等对象
此外,您正在使用==
来比较equals
中的字符串,而不是equals
。这是比较引用,而不是文本数据
此外,您还需要处理friendId
或friendName
为null
的可能性。(因此,不要无条件地对它们调用equals
或hashCode
。)在编写hashCode
和equals
时,您可能需要使用which-hashCode方法来提供帮助
最后,将可变数据类型用作哈希映射中的键。这通常是一个坏主意-如果您向映射添加一个键,然后以影响哈希代码的方式对对象进行变异,那么以后将无法使用相同的键进行获取。我强烈建议您使用不可变类型作为映射键
您需要确定您的相等标准是什么,并且在
hashCode
和相等之间保持一致。如果这两者不一致,您可能会看到类似的问题。您的equals
实现只使用friendId
。您的hashCode
实现同时使用friendName
和friendId
。因此,可以有两个具有不同哈希代码的相等对象
此外,您正在使用==
来比较equals
中的字符串,而不是equals
。这是比较引用,而不是文本数据
此外,您还需要处理friendId
或friendName
为null
的可能性。(因此,不要无条件地对它们调用equals
或hashCode
。)在编写hashCode
和equals
时,您可能需要使用which-hashCode方法来提供帮助
最后,将可变数据类型用作哈希映射中的键。这通常是一个坏主意-如果您向映射添加一个键,然后以影响哈希代码的方式对对象进行变异,那么以后将无法使用相同的键进行获取。我强烈建议您使用不可变类型作为映射键
您需要确定您的相等标准是什么,并且在hashCode
和相等之间保持一致。如果这两者不一致,您可能会看到类似的问题。您将在哪里添加到HashMap
?这是在“魔法密码”里吗?我是从我的意图中得到的。有些值为null,有些则不是。我首先创建一个所有值都为null的hashmap,然后添加从webservice获得的数据。但我试图获取其值的密钥不是空的[com.fresco.mobile.app_data]。Friends@ee5f8300,com.fresco.mobile.app_data。Friends@80c31c61]。您将在何处添加到HashMap
?这是在“魔法密码”里吗?我是从我的意图中得到的。有些值为null,有些则不是。我首先创建一个所有值都为null的hashmap,然后添加从webservice获得的数据。但我试图获取其值的密钥不是空的[com.fresco.mobile.app_data]。Friends@ee5f8300,com.fresco.mobile.app_data。Friends@80c31c61].谢谢你!!这有助于。。你和@Anubian Noob的回答都有帮助,我接受他的回答,因为他先回答了。我真的很感谢你的帮助!!非常感谢。这有助于。。你和@Anubian Noob的回答都有帮助,我接受他的回答,因为他先回答了。我真的很感谢你的帮助@拉尼我很高兴我能帮忙:)@Rani我很高兴我能帮忙:)