【5分でJava入門】MapのcontainsKeyの使い方と速度まとめ

Mapで使用するcontainsKeyメソッドの使い方についてご存知でしょうか?

containsKeyっていったい何?
containsKeyはどうやって使うの?
HashMap.containsKeyとTreeMap.containsKeyの速度の違いは?

今回はそんな悩みを解決するために、containsKeyの使い方を、わかりやすく解説します!

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の使用方法を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

侍ブログ編集部

侍ブログ編集部

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。プログラミングに役立つ情報や有用な情報を発信していきます。
サービスページはこちら
ツイッターはこちら
フェイスブックはこちら