【Java】 コレクション ~ Map 編~

■ 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

■ 主なメソッド

 * put() : 追加
 * get() : 値の取り出し
http://www.javadrive.jp/start/hashmap/index2.html

■ Mapの操作について

 * 以下の関連記事を参照のこと。
http://blogs.yahoo.co.jp/dk521123/36602948.html

関連記事

コレクション ~ Map / あれこれ 編~

http://blogs.yahoo.co.jp/dk521123/36602948.html

コレクション ~ List 編~

http://blogs.yahoo.co.jp/dk521123/32156111.html

コレクション ~ Map編~

http://blogs.yahoo.co.jp/dk521123/33002154.html

コレクション ~ Set 編~

http://blogs.yahoo.co.jp/dk521123/33006348.html

コレクション ~ Queue 編~

http://blogs.yahoo.co.jp/dk521123/33006366.html

コレクション ~ マルチスレッド 編~

http://blogs.yahoo.co.jp/dk521123/34006868.html

列挙型 / enum型 ~応用編 / EnumMap / EnumSet ~

http://blogs.yahoo.co.jp/dk521123/34469119.html