Java Hashmap get(key)即使在值存在时也返回null

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

我正在尝试将数据保存在哈希映射中并检索它。与键相对应的值存在,并且仍然返回null。我还实现了equals()和hashCode()方法

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我很高兴我能帮忙:)