【java map】Mapの使い方、使いどころを実例で解説

プログラミングJavaのMapの基礎・開発実例PG・PC効率UP・ブログ
プログラミングJavaのMapの基礎・開発実例

Androidエンジニアのゆーちゃまさんです^^

当サイト「ドロイドブログ」を運営しています。

Webアプリ開発3年、Androidアプリ開発を10年ほど今現在も現役です。

javaの勉強中の方で

  • javaのmapの使い方がよくわからない。。
  • 実際の開発での実例をしりたい

と思っているかた、多いと思います。
僕も勉強始めたころは、結局べんりなの?って感じでした。。

今回はスクールで勉強して、エンジニアになった現役エンジニアの僕が
初心者でもわかりやすく Mapの使い方を解説します

勉強中だった当時の僕と同じように

  • Mapの使い方がよくわかんない!
  • 結局、何が便利なの?

といった悩みを解決します!
javaを勉強中のかた、いちど目を通してもらえるとうれしいです。

スポンサーリンク

結論:名前を指定してオブジェクトを取得できる

使いたいものを、名前を指定して取得できるのがポイント。

Listも便利ですが、特定のものを取得するにはfor文で中身をチェックしたりとあまり向いていません。

まずは使い方を解説します。

スポンサーリンク

マップの使い方

Mapに登録と取得:put、get

ゆーちゃま
ゆーちゃま

上のコードはコピーしやすいように、したの画像は見やすいように貼り付けました。内容は同じです。

HashMapのputとgetのサンプルソース画像
HashMapのputとgetのサンプルソース画像

1行目でHashMapを生成しています。

生成時に、key(名前)と実際にセットするオブジェクトを何にするのかを宣言する必要があります。

今回の場合、

  • key(名前)は、String
  • 登録するvalue(値)も、String

です。

オブジェクトは上記だとStringですが、なんでも登録できます。例えばInteger型でもOKですし、自分で作成したクラスでもOKです。

3行目で、putを使って値をセットしています。

keyが ”20210418” の文字列で
valueが “testデータ” の文字列になります。

5行目で、getでKeyを指定して取得してSystemOutで表示。

HashMap put、getの実行結果
HashMap put、getの実行結果
ゆーちゃま
ゆーちゃま

eclipseを利用しての実行結果になります。ちゃんと「testデータ」と表示されていますね

マップにkeyが存在するかチェック:containsKey(Object key)

Mapにデータが登録されている状態で、ある特定のデータがMapに入っているかの確認をしたいときがあります。

そんな時は 「containsKey(Object key)」を使えば一発で確認できます^^

map containsKeyの実行結果
map containsKeyの実行結果
ゆーちゃま
ゆーちゃま

7行目で登録した「20210418」keyを、13行目であるかどうか「containsKey()」を使ってあるかどうか存在チェックしています。

存在チェック conteinsKey()

mapのkeyの存在チェックは conteinsKey(”key”)を使う!
存在する場合は true 、存在しない場合は false が返ってくる

マップに値が存在するかチェック:containsValue (Object key)

keyではなく、値(value)でも、マップにその値が存在するかチェックすることが出来ます。

containsValue(Object key)を使えばこちらも一発です!

map containsValueの実行結果
map containsValueの実行結果

13行目でcontainsValue()を使用して、チェックしています。

mapの中に “testデータ1” が存在するかどうか?というチェック内容になります。

  • 値がマップに存在する場合:true
  • 値がマップに存在しない場合:false

Mapの要素を削除 clear() 、マップが空かどうかの判定は isEmpty()

Mapに登録したデータをすべて削除したい!

という場合は、clear()メソッド一発で削除できます^^

また、mapに何か登録されているかどうか。
マップが空かどうか?という判定は isEmpty()メソッドでチェックできます。

map、clearメソッド、isEmptyメソッドの実行結果
map、clearメソッド、isEmptyメソッドの実行結果

13行目で、clear実行前にマップの空チェックを判定しています。
mapは空ではないです!!」と表示されましたね^^
この時点ではマップに3件のデータ登録がされている状態です。

20行目で clearメソッドを実行して、mapを空にしています。

24行目で、再度マップの空チェックを実行してみます。
mapは空です!」と表示されました。
clearメソッドで登録されていたデータが全部消えていることがわかります^^

チェックポイント

Mapのデータ削除には 「clear」メソッドを使う!
Mapが空かどうかの判定には「isEmpty」メソッドを使用する!

すべてのkeyを取得はkeySet()、すべての値を取得するには values()を使おう

mapに登録されているkeyをすべて取得する場合、keySet()を利用。

逆にmapに登録されている値(value)を全部取得するには values()を使用します。

map、keySet、valuesの実行結果
map、keySet、valuesの実行結果

13行目で、keySetを利用してkeyを全部表示。
for文で順番に表示です。

System.out.println(“\n”) は改行です。単純に見やすくするために改行させてます。

18行目で valuesを利用して、値を全部表示。
使い方は簡単ですね^^

そしてポイントですが、keySetでkeyを全部取得できるので、そのまま値も取得できます。
valuesを利用するより、こちらの方がkeyも取得できるので利用する事が多いです。

チェックポイント

keySetを利用することで、keyをすべて取得できる。
valuesを使わなくても、keySetでkeyを取得時に値も全部取得することが出来て楽。

mapの空チェックする時は、nullチェックも忘れずにすること

isEmpty()メソッドでmapが空かどうかのチェックは出来ることが分かりました。

だだし、mapがnullの場合はNullPointerException例外が発生します!

ゆーちゃま
ゆーちゃま

何も参照していない状態がnull。そんなnullの状態の変数のメソッドを使用するとヌルぽが発生しちゃいます!

NullPointerExceptionが発生する理由はとっても大事です!!!
もし自信の無い方は、今の内に理解しておきましょう!

⇒ ⇒ ⇒  【プログラム勉強中】NullPointerException ぬるぽをちゃんと理解しよう!

ということで、nullチェック必ず一緒に実施しましょう!

ゆーちゃま
ゆーちゃま

こんな感じで4行目でマップが空では無かった場合にやりたい処理を記述!

【実例】カレンダー作成時に使用

アプリカレンダー開発
アプリカレンダー開発

Anroid開発になってしまいますが、特に他と変わりはないです。

カレンダーの機能を開発しているとします。

簡単にしていますが、以下の仕様を満たす必要があるとしますね。

  1. カレンダーの日にちを選択したら、選択した日付を赤色にする
  2. 既に選択していた日付を赤から黒にもどす

まず、カレンダー作成時に各日付のViewをyyyyMMdd、20210418のような名前(key)でmapに全て登録しておきます。

そして日付選択時に、選択した日付をyyyyMMddの文字列として保持しておく。

仮に「20210410」としますね。

そして、選択した日付はそのまま赤字に。

ゆーちゃま
ゆーちゃま

ここからがポイントです!

再度別の日付を選択した場合、まず前回選択していた日付を赤字から黒字に戻す必要があります。

保持していた文字列、yyyyMMdd「20210410」をkeyにmapから前回選択していたViewを取得します。

そして取得した前回選択Viewの文字列を赤字から黒字にもどす。

あとは、今回選択した日付を赤字に。

そして同様に、今回選択の日付を文字列で保持しておく。

この繰り返しで、選択した日付を赤字に、前回選択していた日付を黒字にすることができます。

ゆーちゃま
ゆーちゃま

ポイントは前回選択していたViewをmapから名前(今回はyyyyMMdd)ですぐに取得できるという部分になります。

リストで実現するには、毎回for文でListを繰り返しチェックする必要ができてしまいます。

マップだと簡単ですね^^

この簡単な仕様だと、前回の日付Viewをそのまま保持しておけば問題ないです。

しかし、実際の仕様だともう少し複雑で開始日と終了日に色を付けたり、間の日付にも線を引くなどの細かい仕様がありました。

ですので、選択日付だけでなく同時に他の日付オブジェクトも複数取得する必要があり、そのすべてを毎回保持しておくのは大変です。

マップに一括登録しておけば、いつでも取得したい日付オブジェクトをyyyMMddで取得できて便利で楽になる。

この方が処理の書き方もスッキリとします^^

まとめ

少し複雑でしたが、ポイントは名前(key)を指定することで、必要なオブジェクトを簡単に取得できる部分になります^^

色んな機能を紹介・解説しましたが、

  • putでkeyとvalueを指定して、データを登録
  • getでkeyを指定してデータを取得
ゆーちゃま
ゆーちゃま

この2つを覚えておけばOK!!困ることはないです、まじで!他の機能は必要な時にググればすぐに出てきますからね^^

ぶちゃけ、他の機能ってあまり使わないんですよね。
データを登録しておいて、必要な時にとりだすことができればOK!

チェックポイント

getとputだけ覚えておけば、ほとんど困らない!

マップを使うことが出来れば、開発する手段の引き出しが増えて非常に楽になります。

開発する時に常に、ここはマップを使えないだろうか?と考えるとスキルアップのスピードが上がります。

マップをガンガン使って使い方を覚えてちゃいましょう!!

こちらの記事もどうぞ^^

(Visited 179 times, 1 visits today)
スポンサーリンク
スポンサーリンク
スポンサーリンク
PG・PC効率UP・ブログプログラミング
ドロイドブログ

コメント

タイトルとURLをコピーしました