【问题标题】:HashMap get gives null with String as keyHashMap get 以 String 为键给出 null
【发布时间】:2014-04-16 13:52:18
【问题描述】:

我对 HashMap 的 get(Object key) 方法有疑问。

hm.put("597068",o1);
hm.put("ws-5896",o2);

当我尝试以下代码行时,它会给出正确的对象:

hm.get("597068");

但是当我尝试获取 Ws-5896 时,它给出了 Null。为什么?

hm.get("ws-5896");

更新 HashMap 声明:

private static HashMap<String,Ort> hm = new HashMap<String,Ort>();

【问题讨论】:

  • 你能贴出声明HashMap的行吗?
  • 假设 o2 不是 null 并且没有被您或其他线程(如果有)删除,那么可能是您传递的密钥的问题。确保是同一个String,专门检查-
  • 你能比较你放值的键和提取值的键吗?
  • 也许o2null
  • @Harmlezz 我敢打赌。

标签: java string hashmap


【解决方案1】:

不幸的是,HashMap 在执行HashMap.get() 时无法区分空值和无条目。

返回指定键映射到的值,如果是 null 此映射不包含键的映射。

您是否使用HashMap.containsKey() 检查了密钥是否包含在地图中?

返回值为 null 并不一定表示映射 不包含键的映射;地图也有可能 将键显式映射为 null。可以使用 containsKey 操作 区分这两种情况。

【讨论】:

  • containsKey() 返回 false,这很奇怪,因为如果我检查 keySet(),则其中包含“Ws-5896”。
  • 这看起来像是一个案例问题,是吗? WS-5896 与 ws-5896
  • 确实,我解决了。我的代码中的搜索功能将每个字符串都更改为小写。感谢您的提示!
【解决方案2】:

将 hm.keySet() 打印到屏幕上,您会看到代码失败的地方。我敢打赌,您正在寻找“Ws-5896”键,而 HashMap 区分大小写

【讨论】:

  • HashMap 不区分大小写。区分大小写取决于 key equals 实现(在这种情况下,String.equals() 敏感的)
  • @Brian Agnew 我就是这个意思!
猜你喜欢
  • 2014-10-31
  • 2014-07-10
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多