Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Map.keySet()和Set.addAll引发NullPoniterException_Java_Iterator_Treeset_Keyset - Fatal编程技术网

Java Map.keySet()和Set.addAll引发NullPoniterException

Java Map.keySet()和Set.addAll引发NullPoniterException,java,iterator,treeset,keyset,Java,Iterator,Treeset,Keyset,这是一个旧代码,我正在调试它。 我有一张大小为2的地图(myMap)(当然)。键是null和1 SortedSet mySet = new TreeSet(); mySet.addAll(myMap.keySet()); Iterator mySetIterator = mySet.iterator(); while (mySetIterator.hasNext()) { Object newObj = mySetIterator.next(); Object mapObj

这是一个旧代码,我正在调试它。 我有一张大小为2的
地图
(myMap)(当然)。键是
null
1

SortedSet mySet = new TreeSet();
mySet.addAll(myMap.keySet());
Iterator mySetIterator = mySet.iterator();
while (mySetIterator.hasNext()) {
     Object newObj = mySetIterator.next();
     Object mapObj = myMap.get(newObj);
}
循环时,仅迭代一次。我不确定这里出了什么问题。有什么问题吗

请帮帮我。提前谢谢

更新:

现在我在
mySet.addAll(myMap.keySet())中得到以下异常:


请检查关键对象上的compareTo方法

如果“关键点对象比较”方法指示两个关键点对象比较相同,则关键点集将只有一个值,因为设置不允许重复。您正在使用Treeset存储密钥,因此compareTo方法中可能存在问题


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

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

如果这样做会发生什么

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

请提供一个简短但完整的程序来演示这个问题。我认为你应该问一个新问题,因为这是一个新问题,以避免混淆。NPE来自treemap中的比较方法。你有有效的树集比较器吗?或者该类实现与所实现的compareTo方法相当?有空密钥吗?您的compareTo方法是否也可以引发异常?请在新问题中发布新代码。您可以在集合中添加一个空值。当您尝试添加第二个null时,这将是一个问题。当尝试添加第二个元素本身时,这将是一个问题,而不考虑null键或非null键。尝试将键添加到
TreeSet
是一个问题,它尝试排序,但失败。
Iterator mySetIterator = myMap.keySet().iterator();
while (mySetIterator.hasNext()) {
     Object newObj = mySetIterator.next();
     Object mapObj = myMap.get(newObj);
}