Java HashMap:効率的なデータストレージと検索の鍵
はじめに
こんにちは、Javaプログラマー志願者の皆さん!今日、私たちはJava HashMapの素晴らしい世界に飛び込む興奮の旅に出ます。このファンシーな名前があなたを圧倒することはありません。HashMapをあなたのデータのスーパー スマートな書庫と考えてください。それは、あなたが必要ないかなる情報にも今すぐ見つけ出してくれるパーソナルアシスタントのようなものです!
私が初めてHashMapについて学んだとき、本(私たちのデータ)が魔法の本棚から飛び出て、私たちが求める瞬間に手に入る魔法の図書館を想像しました。それはほぼHashMapが行うことですが、本の代わりにコンピュータデータを使っています。クールでしょうか?
それでは、この強力なJavaクラスの秘密を解き明かしていきましょう!
クラス宣言
Javaでは、HashMapクラスは以下のように宣言されます:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
驚きましたよね?今はアルファベットのスープのように見えるかもしれません。心配しないで、分解してみましょう:
-
public class HashMap<K,V>
: これは、HashMapがパブリッククラス(誰でも使用可能)であり、K
はキーの型、V
は値の型の2つの型パラメータを使用することを示しています。 -
extends AbstractMap<K,V>
: HashMapは、AbstractMapという別のクラスの上に構築されています。 -
implements Map<K,V>, Cloneable, Serializable
: これらはHashMapが実装するインターフェースで、それによりさらなるスーパーパワーを持つようになります!
パラメータ
私たちの魔法の図書館のアナロジーを覚えていますか?それでは、HashMapの言葉で言えば:
-
K
: このマップが保持するキーの型 -
V
: マップされた値の型
例えば、人々の年齢を保存したい場合、名前(キー)にはString
を、年齢(値)にはInteger
を使用するかもしれません。
クラスコンストラクタ
HashMapには4つの異なるコンストラクタがあります。これらは、私たちの魔法の図書館を構築する異なる方法と考えてください:
-
HashMap()
: デフォルトのキャパシティとロードファクターで空のHashMapを作成します。 -
HashMap(int initialCapacity)
: 指定された初期キャパシティとデフォルトのロードファクターで空のHashMapを作成します。 -
HashMap(int initialCapacity, float loadFactor)
: 指定された初期キャパシティとロードファクターで空のHashMapを作成します。 -
HashMap(Map<? extends K, ? extends V> m)
: 指定されたMapと同じマッピングを持つ新しいHashMapを作成します。
今はキャパシティとロードファクターについてあまり気を遣わないでください。それらがHashMapが背後でどのように効率的に動作するかに影響を与えることを知っておくだけです。
クラスメソッド
それでは、私たちのHashMapが行えるクールなことをいくつか見てみましょう。最も一般的に使用されるメソッドをいくつか教えます:
メソッド | 説明 |
---|---|
put(K key, V value) |
マップにキーと値のペアを追加します |
get(Object key) |
指定されたキーに関連付けられた値を取得します |
remove(Object key) |
指定されたキーのマッピングを削除します |
clear() |
マップからすべてのマッピングを削除します |
size() |
マップ内のキーと値のマッピングの数を返します |
isEmpty() |
マップにマッピングがない場合はtrueを返します |
containsKey(Object key) |
マップに指定されたキーがある場合はtrueを返します |
containsValue(Object value) |
マップに指定された値がある場合はtrueを返します |
継承されたメソッド
HashMapは、親クラスおよびインターフェースからもメソッドを継承します。それは、私たちの魔法の図書館が古くて賢い図書館からいくつかのトリックを継承したようなものです!以下にいくつかの例を示します:
-
java.util.AbstractMap
から:equals()
,hashCode()
,toString()
-
java.util.Map
から:putAll()
,entrySet()
,keySet()
,values()
例
新たに得た知識を実践して、簡単な例を見てみましょう。科学者の年齢を保存するHashMapを作成します:
import java.util.HashMap;
public class ScientistAges {
public static void main(String[] args) {
// 新しいHashMapを作成
HashMap<String, Integer> scientistAges = new HashMap<>();
// キーと値のペアを追加
scientistAges.put("アルバート・アインシュタイン", 76);
scientistAges.put("アイザック・ニュートン", 84);
scientistAges.put("マリー・キュリー", 66);
// 値を取得し印刷
System.out.println("アルバート・アインシュタインの年齢: " + scientistAges.get("アルバート・アインシュタイン"));
// キーが存在するか確認
if (scientistAges.containsKey("スティーブン・ホーキング")) {
System.out.println("私たちはスティーブン・ホーキングの年齢をお持ちしています。");
} else {
System.out.println("私たちはスティーブン・ホーキングの年齢をお持ちでないです。");
}
// HashMapのサイズを印刷
System.out.println("科学者の数: " + scientistAges.size());
// キーと値のペアを削除
scientistAges.remove("アイザック・ニュートン");
// すべてのキーと値のペアを印刷
for (String name : scientistAges.keySet()) {
System.out.println(name + "は" + scientistAges.get(name) + "歳でした。");
}
}
}
出力
このコードを実行すると、以下のように表示されます:
アルバート・アインシュタインの年齢: 76
私たちはスティーブン・ホーキングの年齢をお持ちでないです。
科学者の数: 3
アルバート・アインシュタインは76歳でした。
マリー・キュリーは66歳でした。
何が起こったかを分解してみましょう:
- 新しいHashMapを
scientistAges
として作成しました。 - 三つのキーと値のペア(科学者の名前とその年齢)を追加しました。
-
get()
メソッドを使ってアインシュタインの年齢を取得しました。 -
containsKey()
を使ってホーキングの年齢をお持ちしているか確認しました。お持ちでないので、「お持ちでない」メッセージを印刷しました。 -
size()
を使ってマップ内の科学者の数を印刷しました。 -
remove()
を使ってニュートンをマップから削除しました。 - 最後に、残りのすべてのキーと値のペアを反復して印刷しました。
それでお終いです!あなたは今、Java HashMapの世界に踏み込んだ最初の一歩をしました。覚えることは、練習が完璧になるのです。異なる種類のデータを持つHashMapを自分で作成してみてください。お気に入りの本とその著者や、友達とその電話番号のマップを作るなど、色々なものを試してみてください。
HashMapは実際のプログラミングでは非常に便利です。それはデータ構造のスイスアーミーナイフであり、万能で効率的で、常に役立つものです。探求を続け、コーディングを続けることで、知らずにHashMapのマスターになっていることになるでしょう!
Credits: Image by storyset