检查hashmap是否包含项目?

时间:2017-03-16 13:19:23

标签: java hashmap hashset

以下代码中的if (!adjacentNodes.get(nodeId).isEmpty())语句有什么问题?

这样的陈述导致以下信息:

  

显示java.lang.NullPointerException

package IN.company;

import java.util.HashMap;
import java.util.HashSet;

public class DiffusionModels {
    public int ICModel(int[] seedSet, HashMap<Integer, HashSet<Integer>> adjacentNodes, double p) {
        HashSet<Integer> infected = new HashSet();
        HashSet<Integer> recentlyInfected = new HashSet();
...

        while (recentlyInfected.size() > 0) {
            HashSet<Integer> nextActivator = new HashSet<>();
            if (!recentlyInfected.isEmpty()) {
                for (Integer nodeId : recentlyInfected) {
                        if (!adjacentNodes.get(nodeId).isEmpty()) {
                            HashSet<Integer> neighborsOfNode =adjacentNodes.get(nodeId) ;
                            for (Integer nodeNeighbor : neighborsOfNode) {
                                if ((Math.random() <= p)&& !(infected.contains(nodeNeighbor))) {
                                    nextActivator.add(nodeNeighbor);
                                }
                            }
                        }
                }
            }
            infected.addAll(recentlyInfected);
            recentlyInfected.clear();
            recentlyInfected.addAll(nextActivator);
        }
        return infected.size();
    }
}

3 个答案:

答案 0 :(得分:1)

这个beacause adjacentNodes为null,这导致NPE。在该行尝试打印adjacentNodes的值之前。希望这会有所帮助。

答案 1 :(得分:1)

试试这个if (adjacentNodes.get(nodeId) != null && !adjacentNodes.get(nodeId).isEmpty()) {

答案 2 :(得分:0)

  

如果有人帮助我解释这句话的问题,我将不胜感激:

if (!adjacentNodes.get(nodeId).isEmpty()) 
     

此声明导致&#34; java.lang.NullPointerException&#34;

根据您发布的代码adjacentNodes null ,或者它不包含nodeId当前引用的密钥。

您必须在该行之前检查adjacentNodes是否 null

如果adjacentNodes不是 null ,您应该使用Java8的getOrDefault()类(https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#getOrDefault-java.lang.Object-V-)的Map方法

if(!adjacentNodes.getOrDefault(nodeId, Collections.emptySet()).isEmpty())){ //...