Javaプログラムの不具合を解析していた時の事です。

不具合の内容は『ソート順が正しくない』というモノでした。

SQLをチェックしたところORDER BY句でカラム指定が一部誤っていたのですが、結果にそれほどの影響はありません。

SQLで取得した結果はHashMapに格納され、その後プログラムでソートを行っているような場所もありませんでした。

原因はHashMapだった!

静的解析だけではどうにもならなかったので、動かしてみる事に。

するとSQLで取得した結果は意図する通りだったものの、HashMapに格納された段階でソート順が崩れていることに気付きました。

「え?putした値から格納されていくもんじゃないの?」

調べてみたところ、どうやらHashMapは『順序を保持しない』ということでした。

上記の記事を参考にHashMapをLinkedHashMapに置換してみたところ、SQLの結果がそのまま格納されることを確認しました。

まとめ

まとめ
  • HashMapはputされた順に格納されるわけではない。
  • putした順に格納していきたい場合はLinkedHashMapを使用する。

もしかしたら基礎中の基礎なのかもしれませんが、ハマりましたね。

以上です。

スポンサーリンク