を繰り返すには、メソッドを使用してから、結果のにMap
を使用する必要があることを理解しています。質問はばかげているかもしれませんが、直接使用できないように正確に実装するにはどうすればよいですか?私が理解している限り、これはコレクションではなく、コレクション全体で使用することを目的としています。しかし、論理的には、キーと値のペアのコレクションでもありませんか(インターフェイスは実装されていませんが)?entrySet()
Iterator
Set
Map
Iterator
Map
Iterator
Map
Collection
4 に答える
AFAIK、マップがサポートする反復には3つのタイプがあり、どちらかを選択する明確な理由がなかったため、マップを直接反復することはできません。同等のことをするentrySet().iterator()
ことは合理的だったかもしれませんが、それはなされた選択ではありません。
エントリ(キー+値)を反復処理しますか、それともキーのみまたは値のみを反復処理しますか?そのため、特定のコレクションを取得してイテレータを取得します。
キー/エントリは一意であるため(重複する要素は存在しません)、とを介してセットを取得しentrySet()
ますkeySet()
。また、値は重複する可能性があるため、コレクションを取得してvalues()
から、これらからイテレータを取得します。
CollectionはIteratorを実装し、Mapはに分類され java.util.Collection
ませんが、Collectionフレームワークでは引き続き考慮されます。
これは私がマップを反復するために使用するものです
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
これは、プログラマーが反復しようとしている値によって異なります。キーまたは値、あるいはその両方です。これに基づいて、繰り返すことができる3つの異なるオブジェクトがあります。例:mapObject.keySet().iterator()
; またはmapObject.values().iterator()
; またはmapObject.entrySet().iterator()
。覚えておくべき唯一のことは、values()
コレクションだけを繰り返すとき、決してそれぞれのキーを取得しないということです。