1

这是一个旧代码,正在调试它。我有一个Map大小为 2 的(myMap)(当然)。键是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)
4

3 回答 3

1

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

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

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

于 2011-10-14T16:21:37.590 回答
1

不可能有nullin SortedSet,因为这个集合需要调用comparTo方法,所以这必须是可比较的对象/基元

于 2011-10-14T16:25:28.510 回答
0

如果你这样做会发生什么?

Iterator mySetIterator = myMap.keySet().iterator();
while (mySetIterator.hasNext()) {
     Object newObj = mySetIterator.next();
     Object mapObj = myMap.get(newObj);
}
于 2011-10-14T16:37:47.770 回答