在HashMap中使用中老是遇到get方法返回的null的情况,但是对应关键字中确实是有值的。
我尝试过下面两种方法,均有时凑效,有时不凑效:
方法A
for (HashMap.Entry<String, List<Channel>> entry : manager.entrySet()) {
if (entry.getKey()!= senderId)continue;
List<Channel> temp1=entry.getValue();
return temp1;
}
遍历。有时能取到值,有时取不到。
方法B
manager.get(senderId)
直接get,有时能取到值,有时取不到。
最后,我使用了这种方法,暂时解决了问题,但不确定会不会遇到新的问题
public static List<Channel> get(String senderId) {
for (HashMap.Entry<String, List<Channel>> entry : manager.entrySet()) {
if (entry.getKey()!= senderId)continue;
List<Channel> temp1=entry.getValue();
return temp1;
}
return manager.get(senderId);
}
非常无奈,马上答辩了,项目还没做完,看haspmap源码又看不懂,现在也没时间看。
希望大佬能不能通俗易通的讲一讲这到底是怎么回事,或者还有没有更稳定的haspMap的取值方法。谢谢!
源码里get(“Key”)是这样,
先比较hash,再比较==, 再比较equals。所以你应该 if (entry.getKey()!= senderId && entry.getKey().equals(senderId))continue;
主要是要看put数据是怎么进去的,是不是有空格或者一些其他字符,不容易发现的问题。
string 比较相等使用equals方法,直接比较直不要比较地址,可能存在副本
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y