ツリーマップ インスタンスから呼び出される entrySet() 関数は、エントリの TreeSet を返しますか、それとも単にエントリのセットを返しますか? 順序は保証されていますか?
エントリのセットとして取得する代わりに、エントリのリストを順番に取得するにはどうすればよいですか?
ツリーマップ インスタンスから呼び出される entrySet() 関数は、エントリの TreeSet を返しますか、それとも単にエントリのセットを返しますか? 順序は保証されていますか?
エントリのセットとして取得する代わりに、エントリのリストを順番に取得するにはどうすればよいですか?
これは逆です。TreeSet は内部で TreeMap を使用します。( TreeSet ドキュメントの最初の文を参照)
Web 上でリンクできる Sun Java ソース コードはあまりありませんが、古いバージョンをいくつか示します。
ご覧のとおり、TreeMap は、 AbstractSet を拡張しただけのTreeMap.EntrySetという内部クラスを定義します。いいえ、 SortedSetを実装していません(それ以外の場合は、 SortedMap.entrySet()コントラクトによって指定される可能性があります)。
しかし、実際の質問に答えると、はい、順序はSortedMap.entrySet()コントラクトで指定されているとおりに保証されます。
更新: JavaDoc リンクは Java 8 用に更新され、ソースは Java 6 のままです
JavaDocから:
public Set<Map.Entry<K,V>> entrySet()
このマップに含まれるマッピングの Set ビューを返します。セットの反復子は、キーの昇順でエントリを返します。
Assert.assertFalse(new TreeMap().keySet() instanceof SortedSet );
Assert.assertFalse(new TreeMap().keySet() instanceof TreeSet ); //no need to assert
しかし、セットには実際には順序があります。