【问题标题】:java: LinkedHashMap containsKey=true but get returns nulljava:LinkedHashMap containsKey=true 但获取返回 null
【发布时间】:2014-04-30 08:53:24
【问题描述】:

我有一个奇怪的问题:迭代一个linkedhashmap的键集,get在某些键上返回null:

...

System.out.println("Map: "+wildCardSummaryKey);

try { 

    rowKeys = wildCardSummaryKey.keySet().iterator();

    while (rowKeys.hasNext()) {

       String rowKey = (String) rowKeys.next();

       ProcessTables.Counter counter = (ProcessTables.Counter) wildCardSummary.get(rowKey);

       System.out.println("key='"+rowKey+"', containsKey="+wildCardSummaryKey.containsKey(rowKey)+", value="+counter);

       System.out.println("count: "+counter.getCount());         
    }

} catch(NullPointerException e) {

    e.printStackTrace();
}

输出是(手动格式化以获得更好的可读性):

Map: {
    abc:abc vpn:Klant:Stichting BlaBla College:Stichting BlaBla College=com.my.ProcessTables$Counter@54deac,
    abc:abc uni/nni:Klant:CA BlaBla F & O BV:CA BlaBla F & O BV=com.my.ProcessTables$Counter@43e6ee5f, 
    abc:abc vpn:Klant:CA BlaBla F & O BV:CA BlaBla F & O BV=com.my.ProcessTables$Counter@6e2bc1cc, 
    abc:abc uni/nni:Klant:Stichting BlaBla College:Stichting BlaBla College=com.my.ProcessTables$Counter@7ac07095
}

key='abc:abc vpn:Klant:Stichting BlaBla College:Stichting BlaBla College', containsKey=true, value=null

java.lang.NullPointerException
at com.my.ProcessTables.getData(ProcessTables.java:1166)
at com.my.ProcessTables.processRequest_getData(ProcessTables.java:1629)
at com.my.ProcessTables.processRequest(ProcessTables.java:81)

第 1166 行是这一行:System.out.println("count: "+counter.getCount());

so:虽然迭代器给了我密钥,但我无法从映射中获取值对象!到底是怎么回事?有什么想法吗?

谢谢! 坦率的

【问题讨论】:

    标签: java map linkedhashmap


    【解决方案1】:

    从这个 SOP 语句中可以看出,包含该键的映射是 wildCardSummaryKey

    System.out.println("key='"+rowKey+"', containsKey="+wildCardSummaryKey.containsKey(rowKey)+", value="+counter);
    

    但您尝试根据rowKey 检索值的映射是wildCardSummary。此映射可能不包含rowKey,因此返回分配给counternull

    您可能需要从wildCardSummaryKey 映射中获取counter

    ProcessTables.Counter counter = (ProcessTables.Counter) wildCardSummaryKey.get(rowKey);
    

    【讨论】:

    • 啊,伙计,谢谢!我已经看了一天多了。你是绝对正确的!
    【解决方案2】:

    LinkedHashMap 可能包含 null 作为合法值,Java 中的其他几个 Map 实现也是如此。

    如果您查看此链接,您可以在文本中看到:

    http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html

    “该类提供所有可选的 Map 操作,并允许 null 元素。”

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      相关资源
      最近更新 更多