■ Mapについて
* C# の Dictionary と同じ * Javaにも Dictionary はあるが、↓だそうです。 「注:このクラスは現在使われていません。 新しい実装では、このクラスを拡張しないで Map インタフェースを実装してください。」http://docs.oracle.com/javase/jp/6/api/java/util/Dictionary.html
■ Mapの種類
http://www.atmarkit.co.jp/fjava/javatips/111java017.htmlが参考になる
[1] Hashtable
* 古い。(from Java1.2。互換性のために残されている) * 同期を取る * !!★注意★!! キーまたは値として null を使用することを許可しない(HashMap とは異なる)http://docs.oracle.com/javase/jp/6/api/java/util/Hashtable.html
[2] HashMap
* !!★注意★!! HashMap は、挿入順を必ずしも確保されない点。(キーのコレクションの順番が一定ではない) ⇒ 挿入順を保持しているMapは、「LinkedHashMap」 * nullが格納できる
使用上の注意
* マルチスレッド時に同期しない。 それどころか、無限ループの恐れあり。 下記のサイトを参照(下記のサイトは、読み物としてもなかなか面白い)http://www.atmarkit.co.jp/ait/articles/0803/28/news141.html
http://www.atmarkit.co.jp/ait/articles/0803/28/news141_2.html
⇒ スレッドダンプの取得することにより、原因を「HashMapが同期(synchronized)されてない」と特定し そのことにより、無限ループしていたため、「CPU使用率が100%に急上昇する事象」が発生していた
[3] TreeMap
* キーで自動ソート * キーが重複した場合は後勝ち * マルチスレッド時に同期しないhttp://docs.oracle.com/javase/jp/6/api/java/util/TreeMap.html
[4] LinkedHashMap
* !!★重要★!! 追加した順を維持する * マルチスレッド時に同期しないhttp://www.syboos.jp/java/doc/map-order-sample.html
http://docs.oracle.com/javase/jp/1.4/api/java/util/LinkedHashMap.html
[5] EnumMap
* Enum用のMap(詳細は、以下の関連記事を参照のこと)列挙型 / enum型 ~応用編 / EnumMap / EnumSet ~
http://blogs.yahoo.co.jp/dk521123/34469119.html