Map <set <node>,String&gt;&gt; </set <node>中的空指针异常

时间:2011-12-07 03:07:50

标签: java

我在查找之前检查了值.....所有值都已分配     但我得到了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;
        }

1 个答案:

答案 0 :(得分:1)

根据您对问题的评论进行更新

如果您的NullPointerException因此功能 返回,则问题显然是找不到匹配的Set

您的Node对象是否正确实施了equals()hashCode()?如果您的SetHashSet已损坏或未定义,则大多数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代替?