工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java HashMap完全マスター:操作、実例、ベストプラクティス

Java HashMapをマスターする

JavaのHashMapクラスの核心機能、一般的な操作、実践的な例を通じて、実世界のアプリケーションで自信を持って使用できるように解説します。

Javaコレクションフレームワークの一部であるHashMapクラスは、キー/値ペアでデータを格納するハッシュテーブルを実装します。各キーは一意であり、関連する値の識別子として機能します。このクラスはMapインターフェースを実装し、データ操作のための多機能なAPIを提供します。

Java HashMap完全マスター:操作、実例、ベストプラクティス

HashMapの作成

java.util.HashMapパッケージをインポートして始めます:

import java.util.HashMap;

その後マップをインスタンス化。ジェネリックキー型Kと値型Vを指定するか、型推論に任せます:

HashMap<K, V> numbers = new HashMap<>();

具体的型での例:

HashMap<String, Integer> numbers = new HashMap<>();

例1:基本的なHashMap作成

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> languages = new HashMap<>();
        languages.put("Java", 8);
        languages.put("JavaScript", 1);
        languages.put("Python", 3);
        System.out.println("HashMap: " + languages);
    }
}

出力

HashMap: {Java=8, JavaScript=1, Python=3}

HashMapの主要操作

HashMapクラスは豊富なメソッドセットを提供します。最も頻繁に使用されるものを以下にカバーします:


1. 要素の追加

put()でキー/値ペアを挿入。キーが既に存在する場合、値が置換されます。

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> numbers = new HashMap<>();
        System.out.println("初期HashMap: " + numbers);
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("put()後のHashMap: " + numbers);
    }
}

出力

初期HashMap: {}
put()後のHashMap: {One=1, Two=2, Three=3}

この例ではキー:String、値:Integerです。


2. 要素へのアクセス

get(key)で値を取得。キーが存在しない場合はnullを返します。

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> languages = new HashMap<>();
        languages.put(1, "Java");
        languages.put(2, "Python");
        languages.put(3, "JavaScript");
        System.out.println("HashMap: " + languages);
        String value = languages.get(1);
        System.out.println("キー1の値: " + value);
    }
}

出力

HashMap: {1=Java, 2=Python, 3=JavaScript}
キー1の値: Java

keySet()、values()、entrySet()で完全なキーセット、値コレクション、エントリセットも取得できます:

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> languages = new HashMap<>();
        languages.put(1, "Java");
        languages.put(2, "Python");
        languages.put(3, "JavaScript");
        System.out.println("HashMap: " + languages);
        System.out.println("Keys: " + languages.keySet());
        System.out.println("Values: " + languages.values());
        System.out.println("Entries: " + languages.entrySet());
    }
}

出力

HashMap: {1=Java, 2=Python, 3=JavaScript}
Keys: [1, 2, 3]
Values: [Java, Python, JavaScript]
Entries: [1=Java, 2=Python, 3=JavaScript]

3. 値の更新

replace(key, newValue)メソッドは、指定キーの既存値を置換します。古い値を返し、キーが存在しなければnullを返します。

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> languages = new HashMap<>();
        languages.put(1, "Java");
        languages.put(2, "Python");
        languages.put(3, "JavaScript");
        System.out.println("元のHashMap: " + languages);
        languages.replace(2, "C++");
        System.out.println("replace()後: " + languages);
    }
}

出力

元のHashMap: {1=Java, 2=Python, 3=JavaScript}
replace()後: {1=Java, 2=C++, 3=JavaScript}

4. 要素の削除

remove(key)でマッピングを削除し、削除された値を返します。条件付き削除にはremove(key, value)を使用し、現在のマッピングが指定値と一致する場合のみ削除します。

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> languages = new HashMap<>();
        languages.put(1, "Java");
        languages.put(2, "Python");
        languages.put(3, "JavaScript");
        System.out.println("HashMap: " + languages);
        String removed = languages.remove(2);
        System.out.println("削除された値: " + removed);
        System.out.println("更新後のHashMap: " + languages);
    }
}

出力

HashMap: {1=Java, 2=Python, 3=JavaScript}
削除された値: Python
更新後のHashMap: {1=Java, 3=JavaScript}

その他のHashMapメソッド

メソッド説明
clear()すべてのマッピングを削除
compute()キーの新しい値を計算
computeIfAbsent()キーが欠落している場合のみ値を計算
computeIfPresent()キーが存在する場合のみ値を計算
merge()既存マッピングと新しいマッピングをマージ
clone()シャローコピーを作成
containsKey()特定キーの存在確認
containsValue()特定値の存在確認
size()キー/値ペアの数
isEmpty()マップが空かどうか

HashMapのイテレーション

for-eachループでキー、値、エントリを走査します。エントリイテレーションにはjava.util.Map.Entryをインポートします。

import java.util.HashMap;
import java.util.Map.Entry;
class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> languages = new HashMap<>();
        languages.put(1, "Java");
        languages.put(2, "Python");
        languages.put(3, "JavaScript");
        System.out.println("HashMap: " + languages);
        System.out.print("Keys: ");
        for (Integer key : languages.keySet()) {
            System.out.print(key + ", ");
        }
        System.out.print("\nValues: ");
        for (String value : languages.values()) {
            System.out.print(value + ", ");
        }
        System.out.print("\nEntries: ");
        for (Entry<Integer, String> entry : languages.entrySet()) {
            System.out.print(entry + ", ");
        }
    }
}

出力

HashMap: {1=Java, 2=Python, 3=JavaScript}
Keys: 1, 2, 3,
Values: Java, Python, JavaScript,
Entries: 1=Java, 2=Python, 3=JavaScript,

別のMapからHashMapを作成

既存マップの内容でHashMapをインスタンス化します:

import java.util.HashMap;
import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> evenNumbers = new TreeMap<>();
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);
        System.out.println("TreeMap: " + evenNumbers);
        HashMap<String, Integer> numbers = new HashMap<>(evenNumbers);
        numbers.put("Three", 3);
        System.out.println("HashMap: " + numbers);
    }
}

出力

TreeMap: {Four=4, Two=2}
HashMap: {Two=2, Three=3, Four=4}

オプションのコンストラクタパラメータで初期容量と負荷係数を設定できます:

HashMap<K, V> numbers = new HashMap<>(8, 0.6f);

デフォルトはcapacity = 16、load factor = 0.75です。

より深い理解のためには、公式JavaドキュメントやJoshua Bloch著「Effective Java」などの信頼できるリソースを参照してください。

Java

  1. Java演算子をマスター:種類、構文、実践例
  2. Javaコメント:種類、使い方、ベストプラクティス
  3. Java if…elseをマスター:制御フローを徹底解説
  4. Java拡張forループをマスター:構文、例、ベストプラクティス
  5. Java文字列をマスター:生成、メソッド、ベストプラクティス
  6. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  7. Java無名インナークラス完全ガイド:定義、構文、実践例
  8. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
  9. Javaアノテーション完全ガイド:種類、配置場所、実践例
  10. Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上
  11. Java Vectorの理解:使い方、特徴、ArrayListとの比較