Map.keySet()和Set.addAll抛出NullPoniterException

时间:2011-10-14 16:16:10

标签: java iterator treeset keyset

这是一个旧代码,正在调试它。 我有Map(myMap),大小为2(当然)。密钥为null1

SortedSet mySet = new TreeSet();
mySet.addAll(myMap.keySet());
Iterator mySetIterator = mySet.iterator();
while (mySetIterator.hasNext()) {
     Object newObj = mySetIterator.next();
     Object mapObj = myMap.get(newObj);
}

这个while循环只迭代一次。我不确定这里有什么问题。有什么问题吗?

请帮帮我。提前谢谢。

更新

现在我在mySet.addAll(myMap.keySet());

中遇到异常
<Oct 18, 2011 12:36:21 PM IST> <Error> <> <BEA-000000> <java.lang.NullPointerException
    at edu.emory.mathcs.backport.java.util.TreeMap.compare(TreeMap.java:934)
    at edu.emory.mathcs.backport.java.util.TreeMap.put(TreeMap.java:97)
    at edu.emory.mathcs.backport.java.util.TreeSet.add(TreeSet.java:149)
    at java.util.AbstractCollection.addAll(AbstractCollection.java:318)
    at edu.emory.mathcs.backport.java.util.TreeSet.addAll(TreeSet.java:165)

3 个答案:

答案 0 :(得分:1)

请检查Key Objects上的compareTo方法。

如果密钥对象compareTo方法指示两个密钥对象都比较相同,那么密钥集将只有一个值,因为Set不允许重复。您正在使用Treeset存储密钥,因此compareTo方法可能存在问题。

请在上下文中发布整个代码以正确找到问题。

答案 1 :(得分:1)

null中不可能有SortedSet,因为此集合需要调用comparTo方法,所以这必须是可比较的对象/原语

答案 2 :(得分:0)

如果你这样做会怎么样?

Iterator mySetIterator = myMap.keySet().iterator();
while (mySetIterator.hasNext()) {
     Object newObj = mySetIterator.next();
     Object mapObj = myMap.get(newObj);
}