2011-10-14 8 views
1

これは古いコードであり、デバッグ中です。 サイズ2のMap(myMap)があります(確かに)。キーはnull1です。Map.keySet()とSet.addAll throw NullPoniterException

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ループは、1回のみ繰り返します。ここで何が間違っているのか分かりません。何か問題ある?

私を助けてください。前もって感謝します。

更新:

は、今私は嘆願がキーオブジェクトのcompareToメソッドをチェック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

私は混乱を避けるために新しい問題であるので、あなたは新しい質問をするべきだと思います。 NPEはツリーマップのcompareメソッドから来ています。あなたは、ツリーセットのための有効な比較器を持っていますか?または、クラスはcompareToメソッドを実装したものと同等の実装をしていますか?ヌルキーはありますか?あなたのcompareToメソッドも例外をスローすることができますか?あなたの新しい質問に新しいコードを投稿してください。 –

答えて

1

で例外の下に取得しています。

キーオブジェクトのcompareToメソッドが、両方のキーオブジェクトが同じものを比較することを示す場合、Setは重複を許可しないため、キーセットは1つの値のみを持ちます。 Treesetを使用してキーを格納しているため、compareToメソッドに問題がある可能性があります。

問題を正しく見つけるために、コード全体を文脈に掲載してください。

+0

'TreeSet'にキーを追加しようとすると、ソートしようとすると失敗します。 – Vaandu

1

このコレクションはcomparToメソッドを呼び出す必要があるためSortedSetnullを持つことは不可能であるので、これはあなたがこれを行うとどうなりますか同等のオブジェクト/プリミティブ

+0

セットにnullを1つ追加できます。 2番目のnullを追加しようとすると問題になります。 –

+1

ヌルキーまたはヌルキーに関係なく、2番目の要素自体を追加しようとすると問題になります。 – Vaandu

+0

それは正しいです。 –

0

でなければなりませんか?

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

1回だけ反復します。 – Vaandu

関連する問題