java:LinkedHashMap containsKey = true但是get返回null

时间:2014-04-30 08:53:25

标签: java map linkedhashmap

我有这个奇怪的问题:迭代一个linkedhashmap的keyset,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());

所以:虽然迭代器给了我关键,但我无法从地图中获取值对象!到底是怎么回事?任何想法?

谢谢! 坦率

2 个答案:

答案 0 :(得分:3)

从此SOP声明中可以看到包含该键的地图wildCardSummaryKey

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

但是,您尝试根据rowKey检索值的地图是wildCardSummary。此地图可能不包含rowKey,因此会返回分配给null的{​​{1}}。

您可能需要从counter地图获取counter

wildCardSummaryKey

答案 1 :(得分:1)

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

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

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

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