2.3. java.util.AbstractMap。Map仲間の親クラスです。¶
AbstractMap。Map仲間の親クラスです。
Map仲間のクラスはこれを継承しています。
Mapには次のようにクラスたちがいます。
HashMap、TreeMap...
目次
2.3.1. クラス図へ変換¶
では、早速クラス図にしてみましょう。
UML変換くんを実行。
> touml .\java\util\AbstractMap.java -o d:\temp
※java1.8コード
※「-o d:temp」はクラス図の出力先です。
2.3.2. 継承を眺めてみる¶
2.3.2.1. Mapインタフェースを継承。¶

MapはMap関連のクラスはこれを実現しないといけません。実現しないとMap仲間から除外されてしまいます。
仲間から除外されるとOOPの利益のポリモーフィズム(多態性)が使えず不便になってしまいます。
OOP:オブジェクト指向プログラミング(object-oriented programming)
2.3.3. フィールドを眺めてみる¶

2.3.3.1. keySet¶
~keySet:Set<K>{volatile}{transient}
keySet( )メソッド内で使われている。コールされたときにkeySetに生成したAbstractSet<K>※を保持する。
※:オーバーライドしたもの
※興味深い実装をしています。
2.3.3.2. values¶
~values:Collection<V>{volatile}{transient}
values ( )メソッド内で使われている。コールされたときにvaluesに生成したAbstractCollection<V>※を保持する。
※:オーバーライドしたもの
※興味深い実装をしています。
2.3.4. メソッドを眺めてみる¶
2.3.4.3. containsValue¶
+containsValue(value:Object):boolean
+containsKey(key:Object):boolean
containsValueは引数valueを保持している要素の値に含まれているか一つづつチェックします。
containsKeyは引数keyを保持している要素のキーに含まれているか一つづつチェックします。
※whileループで回しています。
2.3.4.5. put¶
+put(key:K,value:V):V
引数keyとvalueを要素として追加します。
※ここでは、例外UnsupportedOperationExceptionを投げます。
※これは、子クラスでオーバーライドする必要があります。
2.3.4.9. keySet¶
+keySet():Set<K>
+values():Collection<V>
+entrySet():Set<Entry<K,V>>
keySetは保持しているキーの集合をSet<K>にして返却します。
valuesは保持している値の集合をCollection <K>にして返却します。
entrySetは保持しているキーと値のペアの集合をSet<Entry<K,V>>にして返却します。
2.3.5. 内部クラス¶
2.3.5.1. SimpleEntry。キーと値をペアで持つクラス。¶

SimpleEntryキーと値をペアで持つクラス。
※Simple:シンプルな+Entry:登録用データ(この場合キーと値のペアデータ)
-key:K{readOnly}
-value:V
フィールドを見ると、keyのみ{readOnly}となっています。
※{readOnly}はjavaのfinalのことです。
2.3.5.2. SimpleImmutableEntry。キーと値をペアで持つクラス(不変)。¶

SimpleImmutableEntryはキーと値をペアで持つクラス。
※Simple:シンプルな+Immutable:不変の+Entry:登録用データ(この場合キーと値のペアデータ)
-key:K{readOnly}
-value:V{readOnly}
フィールドを見ると、key、value両方が{readOnly}となっています。
※{readOnly}はjavaのfinalのことです。
2.3.6. まとめ¶
AbstractMapはMap仲間の親クラスです。Map仲間のクラスはこれを継承しています。
ここに書かれている実装はシンプルでした。キーに対応する値をループ文で処理するようなものばかりでした。
実際にこれを継承する子クラスのHashMapなどは、この実装をオーバーライドしてハッシュを使って高速化するのでしょう。
あくまでは、このクラスは基本的なループ処理による実装でした。
