在HashMap中使用get方法获得的返回值是null?

在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