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

Java TreeMap完全マスター:実例で学ぶソート済みマップ

Java TreeMap

JavaのTreeMapクラス - 強力で自然ソートされるマップ実装 - を明確な例、主要操作、高度なナビゲーション技術で探ります。

TreeMapクラスはJavaコレクションフレームワークの一部で、キーの自然順序付けまたはカスタムComparatorに従ってエントリをソートし続ける赤黒木実装を提供します。NavigableMapインターフェースを実装し、マップの走査とクエリに便利なメソッドを追加します。

Java TreeMap完全マスター:実例で学ぶソート済みマップ

TreeMapの作成

TreeMapを使用する前に、パッケージをインポートします:

import java.util.TreeMap;

次にインスタンスを作成します:

TreeMap<Key, Value> numbers = new TreeMap<>();

デフォルトではキーは自然昇順でソートされます。カスタム順序が必要な場合は、コンストラクタにComparatorを渡します。


TreeMapメソッドの概要

このクラスは豊富な操作セットを提供します。以下に主要カテゴリとコードスニペットを示します。


要素の挿入

例:

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);
        evenNumbers.putIfAbsent("Six", 6);
        System.out.println("偶数のTreeMap: " + evenNumbers);
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("One", 1);
        numbers.putAll(evenNumbers);
        System.out.println("数値のTreeMap: " + numbers);
    }
}

出力

偶数のTreeMap: {Four=4, Six=6, Two=2}
数値のTreeMap: {Four=4, One=1, Six=6, Two=2}

要素へのアクセス

コレクションビューの使用

例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("TreeMap: " + numbers);
        System.out.println("キー/値マッピング: " + numbers.entrySet());
        System.out.println("キー: " + numbers.keySet());
        System.out.println("値: " + numbers.values());
    }
}

出力

TreeMap: {One=1, Three=3, Two=2}
キー/値マッピング: [One=1, Three=3, Two=2]
キー: [One, Three, Two]
値: [1, 3, 2]

値の取得

例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("TreeMap: " + numbers);
        int value1 = numbers.get("Three");
        System.out.println("get()使用: " + value1);
        int value2 = numbers.getOrDefault("Five", 5);
        System.out.println("getOrDefault()使用: " + value2);
    }
}

出力

TreeMap: {One=1, Three=3, Two=2}
get()使用: 3
getOrDefault()使用: 5

エントリの削除

例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("TreeMap: " + numbers);
        int removed = numbers.remove("Two");
        System.out.println("削除された値: " + removed);
        boolean removedPair = numbers.remove("Three", 3);
        System.out.println("{Three=3}のエントリは削除されたか? " + removedPair);
        System.out.println("更新後のTreeMap: " + numbers);
    }
}

出力

TreeMap: {One=1, Three=3, Two=2}
削除された値: 2
{Three=3}のエントリは削除されたか? true
更新後のTreeMap: {One=1}

値の置換

例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("First", 1);
        numbers.put("Second", 2);
        numbers.put("Third", 3);
        System.out.println("元のTreeMap: " + numbers);
        numbers.replace("Second", 22);
        numbers.replace("Third", 3, 33);
        System.out.println("replace()後: " + numbers);
        numbers.replaceAll((k, v) -> v + 2);
        System.out.println("replaceAll()後: " + numbers);
    }
}

出力

元のTreeMap: {First=1, Second=2, Third=3}
replace()後: {First=1, Second=22, Third=33}
replaceAll()後: {First=3, Second=24, Third=35}

TreeMapはNavigableMapを実装するため、構造を効率的にクエリするメソッドを提供します。

最初と最後の要素

例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("First", 1);
        numbers.put("Second", 2);
        numbers.put("Third", 3);
        System.out.println("TreeMap: " + numbers);
        System.out.println("最初のキー: " + numbers.firstKey());
        System.out.println("最後のキー: " + numbers.lastKey());
        System.out.println("最初のエントリ: " + numbers.firstEntry());
        System.out.println("最後のエントリ: " + numbers.lastEntry());
    }
}

出力

TreeMap: {First=1, Second=2, Third=3}
最初のキー: First
最後のキー: Third
最初のエントリ: First=1
最後のエントリ: Third=3

Ceiling、Floor、Higher、Lower

これらのメソッドは、与えられたキーに相対的なキーやエントリを返し、範囲クエリを容易にします。

例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("First", 1);
        numbers.put("Second", 5);
        numbers.put("Third", 4);
        numbers.put("Fourth", 6);
        System.out.println("TreeMap: " + numbers);
        System.out.println("higherKey('Fourth'): " + numbers.higherKey("Fourth"));
        System.out.println("higherEntry('Fourth'): " + numbers.higherEntry("Fourth"));
        System.out.println("lowerKey('Fourth'): " + numbers.lowerKey("Fourth"));
        System.out.println("lowerEntry('Fourth'): " + numbers.lowerEntry("Fourth"));
        System.out.println("ceilingKey('Fourth'): " + numbers.ceilingKey("Fourth"));
        System.out.println("ceilingEntry('Fourth'): " + numbers.ceilingEntry("Fourth"));
        System.out.println("floorKey('Fourth'): " + numbers.floorKey("Fourth"));
        System.out.println("floorEntry('Fourth'): " + numbers.floorEntry("Fourth"));
    }
}

出力

TreeMap: {First=1, Fourth=6, Second=5, Third=4}
higherKey('Fourth'): Second
higherEntry('Fourth'): Second=5
lowerKey('Fourth'): First
lowerEntry('Fourth'): First=1
ceilingKey('Fourth'): Fourth
ceilingEntry('Fourth'): Fourth=6
floorKey('Fourth'): Fourth
floorEntry('Fourth'): Fourth=6

ポーリングと範囲

pollFirstEntry()とpollLastEntry()はそれぞれ最初/最後のエントリを削除して返します。

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("First", 1);
        numbers.put("Second", 2);
        numbers.put("Third", 3);
        System.out.println("TreeMap: " + numbers);
        System.out.println("pollFirstEntry(): " + numbers.pollFirstEntry());
        System.out.println("pollLastEntry(): " + numbers.pollLastEntry());
        System.out.println("更新後のTreeMap: " + numbers);
    }
}

出力

TreeMap: {First=1, Second=2, Third=3}
pollFirstEntry(): First=1
pollLastEntry(): Third=3
更新後のTreeMap: {Second=2}

headMap、tailMap、subMap

これらのメソッドは特定キー範囲のビューを提供します。

例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("First", 1);
        numbers.put("Second", 2);
        numbers.put("Third", 3);
        numbers.put("Fourth", 4);
        System.out.println("TreeMap: " + numbers);
        System.out.println("headMap('Fourth'): " + numbers.headMap("Fourth"));
        System.out.println("headMap('Fourth', true): " + numbers.headMap("Fourth", true));
        System.out.println("tailMap('Second'): " + numbers.tailMap("Second"));
        System.out.println("tailMap('Second', false): " + numbers.tailMap("Second", false));
        System.out.println("subMap('Fourth', true, 'Third', false): " + numbers.subMap("Fourth", true, "Third", false));
    }
}

出力

TreeMap: {First=1, Fourth=4, Second=2, Third=3}
headMap('Fourth'): {First=1}
headMap('Fourth', true): {First=1, Fourth=4}
tailMap('Second'): {Second=2, Third=3, Fourth=4}
tailMap('Second', false): {Third=3, Fourth=4}
subMap('Fourth', true, 'Third', false): {Fourth=4, Second=2}

その他のユーティリティメソッド

メソッド説明
clone()マップのシャローコピーを作成
containsKey()キーの存在確認
containsValue()特定値の存在確認
size()エントリ数を返す
clear()すべてのエントリを削除

Comparatorによるカスタムキー順序

キーを異なる順序でソートする場合(逆順、大文字小文字非区別文字列など)、Comparatorを実装し、TreeMapコンストラクタに渡します。

import java.util.TreeMap;
import java.util.Comparator;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>(new CustomComparator());
        numbers.put("First", 1);
        numbers.put("Second", 2);
        numbers.put("Third", 3);
        numbers.put("Fourth", 4);
        System.out.println("TreeMap: " + numbers);
    }
    static class CustomComparator implements Comparator<String> {
        @Override
        public int compare(String a, String b) {
            // 自然順序を逆転
            return a.compareTo(b) * -1;
        }
    }
}

出力

TreeMap: {Third=3, Second=2, Fourth=4, First=1}

Comparatorの詳細については公式Javaドキュメントを参照してください。

Java

  1. Java演算子をマスター:種類、構文、実践例
  2. Javaコメント:種類、使い方、ベストプラクティス
  3. Java拡張forループをマスター:構文、例、ベストプラクティス
  4. Java文字列をマスター:生成、メソッド、ベストプラクティス
  5. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  6. Java無名インナークラス完全ガイド:定義、構文、実践例
  7. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
  8. Javaアノテーション完全ガイド:種類、配置場所、実践例
  9. Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上
  10. Javaコレクションアルゴリズム完全ガイド:ソート、シャッフル、検索など
  11. Java 乱数生成:Random クラスと Math.random 実践ガイド