9

ツリーマップ インスタンスから呼び出される entrySet() 関数は、エントリの TreeSet を返しますか、それとも単にエントリのセットを返しますか? 順序は保証されていますか?

エントリのセットとして取得する代わりに、エントリのリストを順番に取得するにはどうすればよいですか?

4

3 に答える 3

9

これは逆です。TreeSet は内部で TreeMap を使用します。( TreeSet ドキュメントの最初の文を参照)

Web 上でリンクできる Sun Java ソース コードはあまりありませんが、古いバージョンをいくつか示します。

ご覧のとおり、TreeMap は、 AbstractSet を拡張しただけのTreeMap.EntrySetという内部クラスを定義します。いいえ、 SortedSetを実装していません(それ以外の場合は、 SortedMap.entrySet()コントラクトによって指定される可能性があります)。

しかし、実際の質問に答えると、はい、順序はSortedMap.entrySet()コントラクトで指定されているとおりに保証されます。


更新: JavaDoc リンクは Java 8 用に更新され、ソースは Java 6 のままです

于 2010-08-26T07:48:52.423 に答える
6

JavaDocから:

public Set<Map.Entry<K,V>> entrySet()

このマップに含まれるマッピングの Set ビューを返します。セットの反復子は、キーの昇順でエントリを返します。

于 2010-08-26T07:00:26.333 に答える
0
Assert.assertFalse(new TreeMap().keySet() instanceof SortedSet );
Assert.assertFalse(new TreeMap().keySet() instanceof TreeSet ); //no need to assert

しかし、セットには実際には順序があります。

于 2010-08-26T07:55:20.107 に答える