Javaの学習を始めたばかりの方の中には、Mapと言う単語を頻繁に目にするけれどもイマイチなんのことかわかっていない方もいらっしゃるのではないでしょうか?
Javaを扱うプログラマーとして活動していく上で、Mapに関する知識はコーティングを進めていく上で必須となってきます。
そこで本記事では、これまでなんとなくやり過ごしていたけれども、しっかりとJavaのMapについて理解したい方向けに、Mapの概要から基礎的な知識について解説していきたいと思います。
今後のJavaプログラマーとして、しっかりとした下地を作るためにも、本記事の内容でMapについての知識を定着させましょう。
JavaにおけるMapとは
Java言語においてMapとだけ表現される際は、主にHashMapクラスのことを指します。
Mapは日常生活における辞書のような使い方が出来る機能です。
もう少しわかりやすく、具体的な例を出しながら説明していきたいと思います。
皆さんは辞書を利用する際、調べたい「キーワード」を探し、「意味」を調べますよね?
JavaにおけるMapという機能は、辞書でいう「キーワード」と「意味」の組み合わせと同じ意味合いとなります。
Java以外のプログラミング言語ではMapとは違う呼ばれかたも?!
Java以外のプログラミング言語でも、Mapと同じように「キーワード」と「意味」の組み合わせを用いた機能は提供されています。
例えば、PHPでは「連想配列」という呼ばれ方をしていたり、Pythonでは「ディクショナリー(辞書)」と呼ばれるなど、プログラミング言語によって異なる名称が使用されることから、初心者にとっては混乱してしまう問題が残っています。
メソッドなどはもちろんプログラミング言語により異なりますが、基本的な概念は同じと考えてもらって構いません。
JavaのMapについて理解しよう
JavaのMapについてもう少し詳しく説明していきます。
Javaで利用するMapは主にHashMapクラスと上述しましたが、Mapインターフェイスとは何を指すのでしょうか?
実は「Map」自体はインターフェイスとして提供されている機能で、インターフェイス単体では利用することが出来ません。
そこで、インターフェイスを実際に利用するために、実装クラスと呼ばれるHashMapをはじめとしたJava言語で提供されているクラスを利用する必要があります。
JavaにはHashMapやTreeMapなどいくつかの実装クラスが存在する
これまでの説明で、Java言語にはMapインターフェイスを利用するための、実装クラスが用意されていることがわかりました。
ではどんな実装クラスが用意されているのでしょうか?
本記事では、Map関連の実装クラスの中でも特に使用頻度の高いクラスをご紹介していきたいと思います。
- HashMap
- LinkedHashMap
- TreeMap
Java初心者のうちに利用する機会が多いのは、上記の3つとなりますので押さえておきましょう。
特に、多くのプロジェクトでHashMapが用いられるケースが多いため、HashMapに関しては必ず確認しておくようにしてください。
Java言語で頻繁に利用される Mapの実装クラスについて違いを把握しておこう
上記でご紹介したMapの実装クラスについてそれぞれの特徴をご紹介していきます。
ここから先の説明では、Java言語のMapインターフェイスを説明する際に頻繁に利用される「Key」と「Value」の組み合わせを、本記事でも利用していきたいと思います。
辞書の例えで表していた「キーワード」に当たるのが「Key」、「意味」に当たるのが「Value」と把握しておいてください。
具体的な内容を説明しますと、Mapでは「Key」と「Value」はセットで保管されています。
もちろん「Key」と「Value」の組み合わせは1つだけではなく、複数保管されることになります。
辞書の用途を考えると理由がわかりますが、大量にある情報の中から目当ての「キーワード」に対する「意味」を探したいために皆さん利用しますよね?
Mapに関しても同じ用途でご利用いただくものと考えておいてください。
HashMap
HashMapに関しては、言い方は少し悪くなりますが特にこだわりがないのであればHashMapを使っておけば間違いないといった意味合いで利用されることが多い、最も基本的なMapの実装インターフェイスとなります。
HashMapの特徴としては、「Key」と「Value」の並びがバラバラで保管されます。
辞書を例に表すと、「あ」「い」の単語の後にいきなり「わ」の単語が掲載されているようなイメージです。
LinkedHashMap
LinkedHashMapに関しても、HashMapと同じく「Key」と「Value」の並びがバラバラで保管されます。
しかし、HashMapと異なる点は、登録した順番通りにデータが保管されることです。
例えばKeyを「りんご」Valueを「赤色」で登録した後、Keyを「バナナ」Valueを「黄色」で登録すれば、Key「りんご」が先に保管された状態で、次にKey「バナナ」が保管されている順番は変りません。
しかし、HashMapでは入れた順番は関係ないため、複数のデータを登録すると何番目にどの「Key」が登録されているのかはわからなくなってしまいます。
TreeMap
TreeMapでは、登録したデータが「Key」の昇順(小さいものから大きいものへ)の順で保管されます。
どのような順番で登録したとしても、TreeMapクラスが「Key」の昇順に並び直してくれるのが特徴のクラスです。
なんでHashMapが一番利用されているの?
HashMapが一般的に利用されている理由は明確ではありませんが、Mapという特性上「Key」を指定して「Value」を取り出したい用途で使用されるため、登録した順番やKeyの順番にこだわりは必要ないためと考えられます。
基本はHashMapを利用しておき、登録した順番やKeyの順番を活用した取得方法を実行したい場合などにあえてLinkedHashMapやTreeMapを宣言することで、利用用途を明確にする意図があると推察出来ます。
Java Mapの基本的な使い方を理解しよう
Java言語のMapを利用する際、基本的な使い方は1つのMapに対して、「Key」と「Value」の組み合わせを「追加」「取得」「削除」することです。
それぞれの基本メソッドを簡単にご説明しますのでご確認ください。
Java Mapの基本メソッド一覧
- put
「Key」と「Value」を追加するためのメソッドです。
MapオブジェクトA.put("りんご", "赤色")
上記のコードを記述することで、MapオブジェクトAに対し「Key」が「りんご」、「Value」が「赤色」を登録することが出来ます。
- get
「Key」の値を指定して、「Value」の値を取得することが出来るメソッドです。
MapオブジェクトA.get("りんご")
上記のコードを記述することで、MapオブジェクトAから「Key」が「りんご」の「Value」の値、上記の例でいくと「赤色」が取得出来ます。
- remove
「Key」の値を指定して、対象のMapから指定した「Key」と「Value」を削除します。
MapオブジェクトA.remove("りんご")
上記のコードを記述することで、MapオブジェクトAから「Key」が「りんご」のデータを削除することが出来ます。
さいごに
本記事では、Java言語におけるMapの概念と基本的な使い方についてご紹介してきました。
今回の記事を読んで頂ければ、JavaのMapに関する基本は理解して頂けると思います。
しかしMapの使い方に関しては、ご紹介した以外にも様々な方法があり、今回の内容がMapの全てではありません。
ぜひ今回ご紹介した内容を基本として理解していただき、JavaプログラマーとしてMapを使いこなせるようになって頂ければ幸いです。