检查散列表是否包含项目?
以下代码中的语句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();
}
}
这东阳adjacentNodes为空,导致以NPE.Before该行尝试打印相邻节点的值。希望这有助于。
谢谢,我知道,但我该如何解决它? – JavaDev
!adjacentNodes.isEmpty()或!= null –
试试这个if (adjacentNodes.get(nodeId) != null && !adjacentNodes.get(nodeId).isEmpty()) {
我将不胜感激,如果有人帮我解释一下这是什么说法的问题:
if (!adjacentNodes.get(nodeId).isEmpty())
这种说法导致“显示java.lang.NullPointerException”
根据您发布的代码或者adjacentNodes
是null或它不包含当前由nodeId
引用的密钥。
您必须检查adjacentNodes
不是null在该行之前。
如果adjacentNodes
不是空你应该使用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())){ //...
如果您指定的表达式生成'NullPointerException'那么肯定是因为'adjacentNodes.get( nodeId)'返回'null'。特别要注意,'null'是一个完全不同的野兽,从非空引用到一个空的'Map'。 –
谢谢,但我该如何解决它?我用isEmpty函数检查这个问题,这是错误的吗? – JavaDev
@Timothy Truckle,谢谢,但那个话题对我来说不会有用。 – JavaDev