Java NavigableMap完全マスター:機能、メソッド、TreeMap実装
Java NavigableMapインターフェース
このチュートリアルでは、JavaのNavigableMapインターフェース、その主要メソッド、TreeMapでの使用方法を説明します。
JavaコレクションフレームワークのNavigableMapインターフェースは、マップエントリ間のナビゲーション機能を提供します。SortedMapの特殊化であり、効率的な双方向走査を可能にするメソッドで機能を拡張します。
NavigableMapを実装するクラス
NavigableMapはインターフェースであるため、直接インスタンス化できません。主要な実装はTreeMapクラスで、キーをソート順に維持する自己平衡二分探索木構造を提供します。

NavigableMapの使い方
まずインターフェースをインポートします:
import java.util.NavigableMap;
import java.util.TreeMap;
次にインスタンスを作成します:
// TreeMapクラスによるNavigableMap実装
NavigableMap<Key, Value> numbers = new TreeMap<>();
上記コードでは、numbersはキー・値ペアを格納するTreeMapです。Keyは一意の識別子、Valueは関連データです。
NavigableMapの主要メソッド
すべてのSortedMap操作が利用可能ですが、より厳密な制御のためにいくつかがオーバーライドされています。主要メソッドには以下が含まれます:
headMap(key, booleanInclusive)
booleanInclusiveがfalse(デフォルト)の場合、keyより厳密に小さいキーを持つマップの部分をビューとして返します。booleanInclusiveがtrueの場合、返されるマップにkeyのエントリが含まれます。
tailMap(key, booleanInclusive)
booleanInclusiveがtrue(デフォルト)の場合、key以上のキーを持つマップの部分をビューとして返します。falseを渡すとkeyエントリを除外します。
subMap(fromKey, fromInclusive, toKey, toInclusive)
fromKeyとtoKeyの間のビューを提供します。デフォルトはfromInclusive = trueとtoInclusive = falseです。これらのフラグを調整することで、境界キーが結果マップに含まれるかどうかを制御できます。
追加のナビゲーションメソッド
- descendingMap() - エントリ順序を反転
- descendingKeySet() - 反転したキービュー
- ceilingEntry(key) - 与えられたキー以上の最小エントリ
- ceilingKey(key) - 与えられたキー以上の最小キー
- floorEntry(key) - 与えられたキー以下の最大エントリ
- floorKey(key) - 与えられたキー以下の最大キー
- higherEntry(key) - 与えられたキーより大きい最小エントリ
- higherKey(key) - 与えられたキーより大きい最小キー
- lowerEntry(key) - 与えられたキーより小さい最大エントリ
- lowerKey(key) - 与えられたキーより小さい最大キー
- firstEntry() - 最小キーのエントリ
- lastEntry() - 最大キーのエントリ
- pollFirstEntry() - 最初のエントリを取得して削除
- pollLastEntry() - 最後のエントリを取得して削除
公式仕様についてはJava NavigableMapドキュメントを参照してください。
TreeMap実装例
import java.util.NavigableMap;
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
// TreeMapを使用したNavigableMap作成
NavigableMap<String, Integer> numbers = new TreeMap<>();
// マップに要素を挿入
numbers.put("Two", 2);
numbers.put("One", 1);
numbers.put("Three", 3);
System.out.println("NavigableMap: " + numbers);
// マップの最初のエントリにアクセス
System.out.println("最初のエントリ: " + numbers.firstEntry());
// マップの最後のエントリにアクセス
System.out.println("最後のエントリ: " + numbers.lastEntry());
// マップから最初のエントリを削除
System.out.println("削除された最初のエントリ: " + numbers.pollFirstEntry());
// マップから最後のエントリを削除
System.out.println("削除された最後のエントリ: " + numbers.pollLastEntry());
}
}
出力
NavigableMap: {One=1, Three=3, Two=2}
最初のエントリ: One=1
最後のエントリ: Two=2
削除された最初のエントリ: One=1
削除された最後のエントリ: Two=2
TreeMapの詳細についてはJava TreeMapドキュメントを参照してください。
NavigableMapインターフェースとそのTreeMap実装をしっかり理解することで、Javaアプリケーション向けの効率的なソート済みデータ構造を構築できます。
Java
- Javaロギングのマスターガイド:信頼性の高いコードのための必須ベストプラクティス
- C#インターフェイスをマスターする:定義、実装、実践的なユースケース
- Java演算子をマスター:種類、構文、実践例
- Java superキーワード完全攻略:高度な活用法と実践例
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
- Java NavigableSetインターフェースをマスター:ナビゲーション、ソート、実践例
- Javaラムダ式完全ガイド:基礎からStream APIまで
- Java インターフェース vs 抽象クラス:適切な抽象化の選び方
- Javaインターフェース完全ガイド: 定義・実装・多重継承・タグインターフェース
- Java 9プライベートインターフェースメソッド:カプセル化とコード再利用を強化