2011-07-27 17 views
1

ハッシュテーブルとハッシュマップに同等のコードを実行すると、結果が変わるのはなぜですか?Javaイテレーション:HashtableとHashMap

Iterator<Integer> it = ht.keySet().iterator(); 
while(it.hasNext()) { 
    i = it.next(); 
    System.out.println(i + " : " + ht.get(i)); 
} 

htはハッシュテーブルオブジェクトです。私がハムマップオブジェクトであるhmに置き換えられた場合、get()メソッドからの値は印刷されず、nullが出力されます。何故ですか?

+2

何か他の理由から違いが出てくるはずです。比較のために単に 'ht.toString()'を出力してみてください。 –

+3

より完全なテストケースを実行すると、私は異なる結果にはなりません。 (まあ、私は異なる順序を得る)。あなたが使用した完全なコードを投稿しますか? –

+0

申し訳ありませんが、私は反復子の使用を1つのポイントで切り替えて、悪い結果を出しました。それを修正した、コメントのおかげで! – Ari53nN3o

答えて

2

あなたの質問に対する技術的な回答ではありませんが(質問に不十分なコードでは不可能ですが)、私はコードスタイルに関してこの提案をしています。

これは、コードで見つかったバグを回避するのに役立ちました(後のコメントに従って)。

あなたが提供するコード:

Iterator<Integer> it = ht.keySet().iterator(); 
while(it.hasNext()) { 
    i = it.next(); 
    System.out.println(i + " : " + ht.get(i)); 
} 

entry setに対するこのよりエレガントなforeachループに相当します。

for (Map.Entry<Integer, Object> entry : ht.entrySet()) { 
    System.out.println(entry.getKey() + " : " + entry.getValue()); 
} 

することができます場合は、直接イテレータを使用してに優先してこのフォームを使用します。
もう少しです。less code == good

1

ハッシュマップでは、entrySetを取得する必要があると思います。その後、あなたは各項目をループ...

はここでHashMapを反復処理上の参照ですできます。

http://www.java2s.com/Code/JavaAPI/java.util/HashMapentrySet.htm

私も思考のあなたの最初の電車に同意する - それがこのように動作する理由がわかりません。 ..

+2

あなたはこれを行うことができ、より効率的ですが、理由はありませんkeySet()+ get()は動作しません。 –

+0

@David - これは感謝しています - 私はJavaを使い慣れていて、Dryのものに似たキーセットを持った問題を持っていました...私はentrySetを使っています。 – Brian

関連する問題