Mapで使用するcontainsKeyメソッドの使い方についてご存知でしょうか?
containsKeyはどうやって使うの?
HashMap.containsKeyとTreeMap.containsKeyの速度の違いは?
今回はそんな悩みを解決するために、containsKeyの使い方を、わかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
containsKeyとは
containsKeyメソッドは、指定したキーが存在するか確認を行い、キーが存在する場合はtrueを返します。containsKeyの使い方は以下となります。
Map.containsKey(検索するキー)
以下にcontainsKeyを使用した、Mapのキーを検索する処理を記述します。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { //Mapを宣言する Map<Integer, String> map = new HashMap<Integer, String>(); //Mapに値を追加する map.put(1, "apple"); map.put(2, "orange"); map.put(3, "melon"); //キーが存在するか確認 if (map.containsKey(2)) { System.out.println("oraqnge"); } } }
実行結果
orange
サンプルではMapクラスを宣言し、変数mapに値を追加しています。if文で変数mapに対してcontainsKeyメソッドを使用し、キーを指定しています。指定したキーが存在すると、containsKeyはtrueを返します。
速度面
Mapのキーを検索するのに便利なcontainsKeyですが、速度面ではどうなのでしょうか?実際に検証してみましょう。HashMapとTreeMapは、どちらがcontainsKeyメソッドを使用しての検索処理が早いか?ナノ秒単位で比較してみました。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { //HashMapを宣言する Map<Integer, String> hashmap = new HashMap<Integer, String>(); //TreeMapを宣言する Map<Integer, String> treemap = new TreeMap<Integer, String>(); //Mapを追加する for (int i=0; i<=100000; i++) { hashmap.put(i, "apple"); treemap.put(i, "apple"); } // HashMap検索処理開始 long start1 = System.nanoTime(); //HashMapにcontainsKeyを使用 if (hashmap.containsKey(99999)) { // 処理終了時間 long end1 = System.nanoTime(); System.out.println("HashMap:" + (end1 - start1) / 1000000f + "ms"); } // TreeMap検索処理開始 long start2 = System.nanoTime(); //TreeMapにcontainsKeyを使用 if (treemap.containsKey(99999)) { // 処理終了時間 long end2 = System.nanoTime(); System.out.println("TreeMap:" + (end2 - start2) / 1000000f + "ms"); } } }
実行結果
HashMap:0.04469ms TreeMap:0.084892ms
サンプルでは、HashMapとTreeMapを定義して、それぞれ10万件のデータを追加しています。containsKeyで99999のキーが存在するか?それぞれ検索したところ、HashMapが「0.04469ms」に対して、TreeMapは「0,084892ms」となりました。
結果、HashMapがTreeMapより約2倍早いことがわかりました!
Mapについてもっと詳しく知りたい方へ
Mapのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
ここでは、containsKeyの使い方やcontainsKeyを用いて、HashMapとTreeMapの速度検証を行いました。実際の業務では、Mapに数万〜数十万の要素が格納されていることもあります。
膨大なデータの中から目当てのキーを探すために、ループで回して1つずつキーを検索するのは面倒ですし、システムの負荷も高まってしまいます。
そのため、Mapで指定したキーが登録されているか確認するためには、containsKeyを使用する方法が有効となります。もし、containsKeyの使用方法を忘れてしまったら、この記事を思い出してくださいね。