Java Map.keySet()和Set.addAll引发NullPoniterException
这是一个旧代码,我正在调试它。 我有一张大小为2的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
地图
(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);
}