注目記事

【Javaコード入門】コレクションフレームワーク_⑩NavigableMap

近接したキーを取得するためのマップ – NavigableMapインターフェイス

NavigableMapは、指定されたキーに近接したキーを取得するための機能を備えたマップです。NavigableMapを利用することで、たとえば指定されたキー周辺のキーを取得したい、というような処理を手軽に実装できます。 NavigableMapインターフェイスで提供されている主なメンバーは、以下の通りです。

NavigableMapインターフェイスで利用できる主なメソッド
分類 メンバー 概要
キー ceilingKey(K key) 指定したキーと等しいか大きいキーで最小のキーを取得
floorKey(K key) 指定したキーと等しいか小さいキーで最大のキーを取得
higherKey(K key) 指定したキーよりも大きいキーで最小のキーを取得
lowerKey(K key) 指定したキーよりも小さいキーで最大のキーを取得
ceilingEntry(K key) 指定したキーと等しいか大きいキーで最小のエントリーを取得
floorEntry(K key) 指定したキーよりも大きいキーで最小のエントリーを取得
higherEntry(K key) 指定したキーよりも大きいキーで最小のエントリーを取得
lowerEntry(K key) 指定したキーよりも小さいキーで最大のエントリーを取得
firstEntry() 最小のキーでエントリーを取得(Java 21以降)
lastEntry() 最大のキーでエントリーを取得(Java 21以降)
サブマップ headMap(K toKey [,boolean inclusive]) 指定したキーよりも小さいキーを持つサブマップを取得 (引数inclusiveがtrueの場合は指定したキーと等しいものを含む)
tailMap(K fromKey [, boolean inclusive]) 指定したキーよりも大きいキーを持つサブマップを取得 (引数inclusiveがtrueの場合は指定キーと等しいものを含む)

前述のTreeMapクラスもまた、NavigableMapインターフェイスを実装しています。以下は、TreeMapを利用して、あらかじめ用意された辞書から目的の単語を検索する例です。単語を指定すると、それに最も近い前後の単語を候補として提案します。

CollNavigable.java

  1. package com.example.mynavi.collection;
  2.  
  3. import java.util.NavigableMap;
  4. import java.util.TreeMap;
  5.  
  6. public class CollNavigable {
  7.   public static void main(String[] args) {
  8.     var map = new TreeMap<String, String>() {
  9.       {
  10.         put("ketchup", "ケチャップ");
  11.         put("margarine", "マーガリン");
  12.         put("miso", "味噌");
  13.         put("mustard", "マスタード");
  14.         put("oil", "油");
  15.       }
  16.     };
  17.  
  18.     var key = "mayonnaise";
  19.  
  20.     System.out.print("お探しの調味料は");
  21.     System.out.print(map.lowerEntry(key) + "または");
  22.     System.out.print(map.ceilingEntry(key));
  23.     System.out.println("ではありませんか?");
  24.   }
  25. }

  1. お探しの調味料はmargarine=マーガリンまたはmiso=味噌ではありませんか?
コレクションフレームワーク_目次
コレクションフレームワーク
コレクションを初期化する
synchronizedList/synchronizedMap/synchronizedSetメソッド
ArrayListクラス
asListメソッド
toArrayメソッド
LinkedList
HashMap
TreeMap
NavigableMap
HashSet
ArrayDeque

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。