3

と の両方で実行されるアプリケーションがあり1.4ます1.6。要素の順序が1.6バージョンで印刷されているのとは異なり1.4ます。LinkedHashMap問題を修正したものを使用しました。現在、この順序は とまったく同じです1.4。jdk 全体をダウンロードする以外1.4のソースコードは見つかりませんでした。HashMap新しいバージョンで変更された一般的なものを除いて?

4

3 に答える 3

4

の要素の反復順序はHashMap保証されていないため、実装は自由に変更できました。この欠点は によって修正されましたLinkedHashMap

このような変更は、たとえばJava 1.4.1 でのハッシュ アルゴリズムの完全な刷新が原因である可能性がありますが、プロジェクトを Java6 に移行したときにそのような変更に気付いたため、そのバージョンにも変更がありました。

于 2012-04-25T15:57:00.157 に答える
2

の反復の順序HashMap未定義です。つまり、常に変化する可能性があります (実際に変化します)。これは、コードだけでなく、オブジェクトのハッシュ コードの値にも依存し、それ自体がバージョンごとに異なるだけでなく、実行ごとに異なる場合もあります。

LinkedHashMapHashMap予測可能な反復順序を持つ代替手段として具体的に存在します。

于 2012-04-25T15:57:12.130 に答える
0

HashMap の実装が変更されたと思います。HashMap は順序を保証しないため、新しいリリースで通知なしに変更される可能性があるため、それに依存するべきではありません。

于 2012-04-25T15:58:14.787 に答える