前回までに引き続き、今回からは Map インターフェースとそのサブインターフェースを(一覧)。
メソッドは独断と偏見で幾つかにカテゴリー分けしてます:
- エントリーなどの取得:get() や keySet() など
- エントリーの追加:put() など
- エントリーの削除:remove() など
その他注意点
- 拡張対象のインターフェースに定義されているメソッドには @Override アノテーションを付与してます。 ただし、インターフェースのメソッドに @Override を付与すると実際にはコンパイルエラーになります。
Map インターフェース
package java.util; public interface Map<K,V>{ int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); // ********** エントリーなどの取得 ********** V get(Object key); Collection<V> values(); Set<K> keySet(); Set<Map.Entry<K,V>> entrySet(); // ********** エントリーの追加 ********** V put(K key, V value); void putAll(Map<? extends K, ? extends V> m); // ********** エントリーの削除 ********** V remove(Object key); void clear(); }
全てのキーを返すメソッド keySet()、全てのエントリーを返すメソッド entrySet() の返り値は Set なのに対して、全ての値を返すメソッド values() の返り値は Collection であることに注意。 これは、キーは(よってエントリーも)重複を許さない一方、値は重複してもよいためです。
例えば、
{a=c, b=c}
は許されますが
{a=c, a=d}
は許されません。
ちなみに、
{a=c, b=c}
に対して
keySet() : [a, b]
values() : [c, c]
となります。 values() の返り値の Collection では、要素が重複するのに注意。
SortedMap インターフェース
SortedMap はエントリーをキーの順に並べた Map です。 追加されたメソッドは Set に対して SortedSet に追加されたメソッド(→)と同様のものです(キーに対する同様の操作)。
SortedSet 同様、Java SE 6 以降では後に載せてある NavigableMap を使用しましょう。
package java.util; public interface SortedMap<K,V> extends Map<K,V>{ @Override int size(); @Override boolean isEmpty(); @Override boolean containsKey(Object key); @Override boolean containsValue(Object value); Comparator<? super K> comparator(); // ********** エントリーなどの取得 ********** @Override V get(Object key); @Override Collection<V> values(); K firstKey(); K lastKey(); @Override Set<K> keySet(); @Override Set<Map.Entry<K,V>> entrySet(); SortedMap<K,V> headMap(K toKey); SortedMap<K,V> subMap(K fromKey, K toKey); SortedMap<K,V> tailMap(K fromKey); // ********** エントリーの追加 ********** @Override V put(K key, V value); @Override void putAll(Map<? extends K,? extends V> m); // ********** エントリーの削除 ********** @Override V remove(Object key); @Override void clear(); }
NavigableMap インターフェース
NavigableMap もエントリーをキーの順に並べた Map です。 SortedMap よりも順序に関連した取得メソッドが豊富に定義されています(逆に分かりにくい?)。 Java SE 6 以降では NavigableMap を使用しましょう。
package java.util; public interface NavigableMap<K,V> extends SortedMap<K,V>{ @Override int size(); @Override boolean isEmpty(); @Override boolean containsKey(Object key); @Override boolean containsValue(Object value); @Override Comparator<? super K> comparator(); // ********** エントリーなどの取得 ********** @Override V get(Object key); @Override Collection<V> values(); @Override K firstKey(); K lowerKey(K key); K floorKey(K key); K ceilingKey(K key); K higherKey(K key); @Override K lastKey(); @Override Set<K> keySet(); NavigableSet<K> navigableKeySet(); NavigableSet<K> descendingKeySet(); Map.Entry<K,V> firstEntry(); Map.Entry<K,V> lowerEntry(K key); Map.Entry<K,V> floorEntry(K key); Map.Entry<K,V> ceilingEntry(K key); Map.Entry<K,V> higherEntry(K key); Map.Entry<K,V> lastEntry(); Map.Entry<K,V> pollFirstEntry(); Map.Entry<K,V> pollLastEntry(); @Override Set<Map.Entry<K,V>> entrySet(); NavigableMap<K,V> descendingMap(); @Override SortedMap<K,V> headMap(K toKey); @Override SortedMap<K,V> subMap(K fromKey, K toKey); @Override SortedMap<K,V> tailMap(K fromKey); NavigableMap<K,V> headMap(K toKey, boolean inclusive); NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive); NavigableMap<K,V> tailMap(K fromKey, boolean inclusive); // ********** エントリーの追加 ********** @Override V put(K key, V value); @Override void putAll(Map<? extends K,? extends V> m); // ********** エントリーの削除 ********** @Override V remove(Object key); @Override void clear(); }