2.2. java.util.Map。要素にキーワードをつけ便利にする。¶
Mapは集合を扱うクラスのインタフェースです。
ですので、使うときにはこのクラスを実現した子クラス(HashMapなど)を使います。
Mapの特徴としては、集合の要素にキーをつけて、キーから簡単に要素を取得できたりすることです。
mapの意味は「地図、天体図、星座図、図解、図表」です。
つまり、要素にキーをつけた表を作るイメージです。
キー |
要素(鳴き声) |
|---|---|
熊 |
ガオー |
馬 |
ヒッヒーン |
犬 |
ワンワン |
目次
2.2.1. クラス図へ変換¶
では、早速クラス図にしてみましょう。
UML変換くんを実行。
> touml .\java\util\Map.java -o d:\temp\
※java1.8コード
※「-o d:temp」はクラス図の出力先です。
2.2.4. メソッドを眺めてみる。¶
2.2.4.1. size¶
~size():int
~isEmpty():boolean
抽象メソッドなので実装はありません。子クラスがオーバーライドします。
seizeは集合の要素の数を返し、isEmptyは集合の要素が空かどうかを返します。
2.2.4.2. containsKey¶
~containsKey(key:Object):boolean
~containsValue(value:Object):boolean
抽象メソッドなので実装はありません。子クラスがオーバーライドします。
containsKeyはkeyがキーの要素に含まれるかをチェックします。
containsValueはvalueが値の要素に含まれるかをチェックします。
2.2.4.4. put¶
~put(key:K,value:V):V
抽象メソッドなので実装はありません。子クラスがオーバーライドします。
要素を追加する。引数keyにキー要素、引数valueに値要素をセットして追加します。
2.2.4.6. putAll¶
~putAll(m:Map<?extends K,?extends V>):void
抽象メソッドなので実装はありません。子クラスがオーバーライドします。
引数mのMap集合をすべて追加します。
2.2.4.8. keySet¶
~keySet():Set<K>
~values():Collection<V>
抽象メソッドなので実装はありません。子クラスがオーバーライドします。
内部で持っている、キー(key)の集合、値(values)の集合を取得します。
2.2.4.9. entrySet¶
~entrySet():Set<Map.Entry<K,V>>
抽象メソッドなので実装はありません。子クラスがオーバーライドします。
エントリセットを取得します。
2.2.4.10. equals¶
~equals(o:Object):boolean
~hashCode():int
抽象メソッドなので実装はありません。子クラスがオーバーライドします。
equalsは引数oと自分自身のインスタンスが同じかをチェックします。
2.2.4.11. getOrDefault¶
~getOrDefault(key:Object,defaultValue:V):V
これはdefaultメソッドで、インタフェースでも実装があります。
引数keyがあれば、それに対応する値を返します。なければ、引数Vをそのまま返します。
2.2.4.12. forEach¶
~forEach(action:BiConsumer<?super K,?super V>):void
これはdefaultメソッドで、インタフェースでも実装があります。
メソッドとしてfor eachのループを実行します。 処理内容は引数actionに関数オブジェクトを書いてそれをセットします。
2.2.4.13. replaceAll¶
~replaceAll(function:BiFunction<?super K,?super V,?extends V>):void
これはdefaultメソッドで、インタフェースでも実装があります。
引数functionの関数オブジェクトの処理を使って、要素の置換をします。
関数オブジェクトBiFunctionをオーバーライドして処理を実装します。
2.2.4.14. putIfAbsent¶
~putIfAbsent(key:K,value:V):V
これはdefaultメソッドで、インタフェースでも実装があります。
引数keyに対応する、箇所がまだ空いていたらvalueを追加します。
2.2.4.15. remove¶
~remove(key:Object,value:Object):boolean
これはdefaultメソッドで、インタフェースでも実装があります。
引数keyに対応する値が引数valueと同じ場合は、削除します。
2.2.4.16. replace¶
~replace(key:K,oldValue:V,newValue:V):boolean
~replace(key:K,value:V):V
これはdefaultメソッドで、インタフェースでも実装があります。
引数keyで取得した値があれば引数valueで置き換えます。
※引数oldValueは、引数keyで取得した値した値と比較して同じ場合にvalueと置き換えます。
2.2.4.17. computeIfAbsent¶
~computeIfAbsent(key:K,mappingFunction:Function<?super K,?extends V>):V
~computeIfPresent(key:K,remappingFunction:BiFunction<?super K,?super V,?extends V>):V
~compute(key:K,remappingFunction:BiFunction<?super K,?super V,?extends V>):V
これはdefaultメソッドで、インタフェースでも実装があります。
2.2.4.18. merge¶
~merge(key:K,value:V,remappingFunction:BiFunction<?super V,?super V,?extends V>):V
これはdefaultメソッドで、インタフェースでも実装があります。
引数keyで取得した値と、引数valueを引数remappingFunctionでセットした関数オブジェクトでマージして置き換えます。
2.2.5. 内部クラス¶
2.2.5.1. Entry。キーと値をペアにします。¶
Mapのキーと値のペアを扱うためのインタフェースです。
2.2.6. まとめ¶
Mapは集合を扱うクラスなので、追加put、削除remove、取得getなど一連の操作がまとまっていました。
連想配列としてだけではない、別の使い方がありそうです。