我在查找之前检查了值.....所有值都已分配 但我得到了nullpointer异常....如果这是错误的话,任何人都可以告诉我如何遍历map吗?
static String findtheregion(Map<Set<Node>, String> rtn1,Node node)
{
Set<Set<Node>> ls=rtn1.keySet();
Iterator<Set<Node>> it=ls.iterator();
String str;
while(it.hasNext())
{
Set<Node> sn=it.next();
if(sn.contains(node)){
str=rtn1.get(sn);
return str;}
}
return null;
}
答案 0 :(得分:1)
根据您对问题的评论进行更新:
如果您的NullPointerException
因此功能 返回,则问题显然是找不到匹配的Set
。
您的Node
对象是否正确实施了equals()
和hashCode()
?如果您的Set
和HashSet
已损坏或未定义,则大多数equals()
实施(尤其是hashCode()
)将无效。
原始回答:
您是否有理由不使用新的增强型for
语法?
看起来你要做的是:
static String findTheRegion(Map<Set<Node>, String> rtn1, Node node) {
for (Map.Entry<Set<Node>, String> entry : rtn1.entrySet()) {
if (entry.getKey().contains(node)) {
return entry.getValue();
}
}
return null;
}
我没有看到NullPointerException
发生任何显而易见的地方,但如果Set<Node>
可变,我很容易发现此代码存在问题。如果该集在被用作密钥时发生更改,则几乎肯定会使正在使用的Map
实现的不变量无效,这可能会产生NullPointerException
。
此外,您的数据结构对您尝试执行的操作没有意义。您是否应该使用Multimap
代替?