モジュール java.base
パッケージ java.util

インタフェースSortedMap<K,V>

型パラメータ:
K - このマップで保持されるキーの型
V - マップされる値の型
すべてのスーパー・インタフェース:
Map<K,V>, SequencedMap<K,V>
既知のすべてのサブインタフェース:
ConcurrentNavigableMap<K,V>, NavigableMap<K,V>
既知のすべての実装クラス:
ConcurrentSkipListMap, TreeMap

public interface SortedMap<K,V> extends SequencedMap<K,V>
そのキーに対して全体順序付けを提供するMapです。 マップの順序付けは、キーの自然順序付けに従って行われるか、ソート・マップ構築時に通常提供されるComparatorを使って行われます。 この順序は、ソート・マップのコレクション・ビュー(entrySetkeySetvaluesメソッドによって返される)の反復処理時に反映されます。 その順序付けを利用するために、追加のオペレーションがいくつか提供されています。 (このインタフェースはマップで、SortedSetに類似しています。)

ソート・マップに挿入されるすべてのキーは、Comparableインタフェースを実装するか、指定されたコンパレータによって受け入れられる必要があります。 さらに、各キーは相互に比較可能である必要があります。つまり、ソート・マップ内の任意のキーk1k2に対して、k1.compareTo(k2) (またはcomparator.compare(k1, k2))がClassCastExceptionをスローしてはいけません。 この制約に違反すると、その違反側のメソッドやコンストラクタの呼出しはClassCastExceptionをスローします。

あるソート・マップがMapインタフェースを正しく実装するには、明示的なコンパレータが提供されているかどうかにかかわらず、そのソート・マップによって維持される順序付けがequalsとの一貫性のあるものでなければいけないことに注意してください。 (equalsとの一貫性の正確な定義については、ComparableインタフェースまたはComparatorインタフェースを参照してください。) これはMapインタフェースがequalsオペレーションに基づいて定義されるためですが、ソート・マップはそのcompareTo (またはcompare)メソッドを使用してすべてのキー比較を実行するので、このメソッドによって等しいと見なされる2つのキーは、ソート・マップから見ても同じものです。 ツリー・マップの動作は、その順序付けがequalsと一貫性がない場合でも明確に定義されていますが、Mapインタフェースの一般規約には準拠していません。

汎用のソート・マップ実装クラスはすべて、4つの「標準」コンストラクタを提供するべきです。 ただし、必要なコンストラクタをインタフェースによって指定することはできないため、この推奨事項を強制することはできません。 すべてのソート・マップ実装に期待される「標準」コンストラクタは次のとおりです。

  1. void (引数なし)コンストラクタ。これは、キーの自然順序付けに従ってソートされた空のソート・マップを作成します。
  2. Comparator型の単一引数を持つコンストラクタ。これは、指定されたコンパレータに従ってソートされた空のソート・マップを作成します。
  3. Map型の単一引数を持つコンストラクタ。これは、キーの自然順序付けに従ってソートされた、その引数と同じキーと値のマッピングを含む新しいマップを作成します。
  4. SortedMap型の単一引数を持つコンストラクタ。これは、入力のソート・マップと同一のキーと値のマッピングと順序付けとを持つ、新しいソート・マップを作成します。

ノート:一部のメソッドは、制限されたキー範囲を持つサブマップを返します。 そのような範囲は片側が開いています。つまり、それらの範囲には、下端点は含まれますが上端点は含まれません(該当する場合)。 上下端点を含む閉じた範囲が必要で、キーの型により直後のキーが計算可能になる場合、単にlowEndpoint - successor(highEndpoint)の部分範囲を指定してください。 たとえば、mが、キーが文字列のマップであるとします。 次の慣用法は、キーがlow - highの範囲(上下端点を含む)にあるm内のすべてのキーと値のマッピングを保持するビューを取得します。

   SortedMap<String, V> sub = m.subMap(low, high+"\0");
同様のテクニックを使って、上下端点のどちらも含まない開いた範囲を生成できます。 次の慣用法は、キーがlow - highの範囲(上下端点を含まない)にあるm内のすべてのキーと値のマッピングを保持するビューを取得します。
   SortedMap<String, V> sub = m.subMap(low+"\0", high);

このインタフェースは、Java Collections Frameworkのメンバーです。

導入されたバージョン:
1.2
関連項目: