【问题标题】:checking wether a hashmap has items or not? [duplicate]检查哈希图是否有项目? [复制]
【发布时间】:2017-03-16 13:19:23
【问题描述】:

下面代码中的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();
    }
}

【问题讨论】:

  • 如果您指定的表达式生成NullPointerException,那肯定是因为adjacentNodes.get(nodeId) 返回null。请特别注意,null 与对空 Map 的非空引用完全不同。
  • 谢谢,但我该如何解决呢?我用 isEmpty 函数检查了这个问题,是不是错了?
  • @Timothy Truckle,谢谢,但该主题对我没有用处。

标签: java hashmap hashset


【解决方案1】:

这是因为相邻节点为空,这会导致 NPE。在该行之前尝试打印相邻节点的值。希望这会有所帮助。

【讨论】:

  • 谢谢,我知道了,但是我该如何解决呢?
  • !adjacentNodes.isEmpty() 或 != null
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果有人帮助我并解释此语句的问题是什么,我将不胜感激:

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

    此语句导致“java.lang.NullPointerException”

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-03
      • 2017-04-28
      • 2016-10-29
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2013-12-06
      • 2011-09-16
      相关资源
      最近更新 更多