2011-05-18 19 views
2

うまくいくいくつかのコードを書いていますが、私はTreeMapを宣言する正しい方法について混乱しています。TreeMap - SortedMapまたはMapをどのように宣言しますか?

SortedMapがMapのサブインターフェイスである場合、コードが正常に動作している場合はMapを使用するだけでOKですか? TreeMapがマップで正常に動作する場合は、SortedMapも必要ですか?

それは次のようになります。

private Map<String, List <Bus>> map = new TreeMap<String, List <Bus>>(); 

または

private SortedMap<String, List <Bus>> map = new TreeMap<String, List <Bus>>(); 

感謝。 申し訳ありませんが、これは基本的なことです - 私はJavaを初めて使用しています。

答えて

1
private Map<String, List <Bus>> busTimetable = new TreeMap<String, List <Bus>>(); 

あなたは常にあなたができる最高レベルのインタフェースを使用し、正当な理由がない限り。

5

私はSortedMapを使って、既にソートされていることを他の人に知らせています。 Mapを使用しても問題ありません。

+4

+1コレクションを実装する具体的なクラスがなくても、コレクションの特性を公開することをお勧めします。 – karmakaze

0

特定のSortedMapメソッド(firstKey()/lastKey()など)を使用する必要がある場合は、参照をSortedMapと宣言することが必須です。それ以外の場合はMapを選択してください。Mapとしてのみ使用する予定があるので、コードを変更することなく実装を切り替えることができます。

1

あなたの質問に対する回答は、あなたの使い方によって異なります。デフォルトでは、データタイプのインターフェース(例:Map)にプログラミングするだけです。 SortedMapMapで宣言されていないメソッドを使用する場合は、SortedMapにプログラムします。

0

バニラ以外のメソッドを使用する場合は、SortedMapを使用する他のコメント作成者に同意しますMap暗黙にがソートされた入力に依存する場合は、イテレータまたはfor-eachループで使用する場合は、SortedMapも使用してください。

これらのケースに該当しない場合は、Mapのみが必要な場合は、HashMapをお勧めします。 HashMapはO(1)アクセス権を持ちます。 TreeMapはありません。

0

可能であれば、マップは最高レベルの抽象化を使用します。その理由は、サービスを作成していて、データのリストを消費し、Mapで出力を生成するためです。 特定のインタフェースSortedMapを使用する場合、一部のクライアントはマップ内のデータの並べ替え順序を予期してもよく、他のクライアントはマップの挿入順にデータを必要とするだけかもしれません。この種のシナリオでは、1つのサービスを使用して処理することはできません。ソートされた順序を期待しているため、2つの異なるAPIを作成することになります。つまり、あなたのプログラムはどれほど柔軟性がありますか?

関連する問題