2

正常に動作するコードをいくつか書きましたが、TreeMap を宣言する正しい方法について混乱しています。

SortedMap が Map のサブインターフェースである場合、コードが正常に機能している場合、Map を使用しても問題ありませんか? TreeMap が Map で正常に動作する場合、SortedMap は必要ですか?

それは次のとおりです。

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

また

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

ありがとう。申し訳ありませんが、これはとても基本的なものです - 私は Java が初めてです。

4

6 に答える 6

5

私はSortedMapそれがすでにソートされていることを他の人に知らせていました。使用MapもOKです。

于 2011-05-18T22:46:25.503 に答える
1
private Map<String, List <Bus>> busTimetable = new TreeMap<String, List <Bus>>();

正当な理由がない限り、常に可能な限り最高レベルのインターフェイスを使用してください。

于 2011-05-18T22:44:09.900 に答える
1

あなたの質問への答えは、あなたの使い方によって異なります。デフォルトでは、単純にデータ型のインターフェイス (つまりMap) にプログラムする必要があります。SortedMapで宣言されていない使用するメソッドを が提供する場合はMap、 にプログラムしSortedMapます。

于 2011-05-19T03:32:48.683 に答える
0

SortedMap特定のメソッド(firstKey()/ lastKey()/ whatever ...など)を使用する必要がある場合は、参照をとして宣言する必要がありますSortedMap。それ以外の場合Mapは、それをとして使用することだけを計画している場合は、それを選択しますMap。そのため、コードを変更せずに実装を切り替えることができます。

于 2011-05-18T23:41:25.230 に答える
0

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

于 2013-02-12T22:30:38.813 に答える
0

SortedMapバニラにないメソッドを使用する場合に使用する他のコメント投稿者に同意しますMap。また、並べ替えられた入力に暗黙的 に依存してSortedMapいる場合は、反復子または for-each ループで使用する場合にも使用します。

Mapこれらのケースのどちらにも当てはまらない場合は、バニラのみが必要かどうかについても検討する必要がありますHashMap。より良い選択かもしれません。HashMapO(1) アクセス権があります。TreeMapではない。

于 2011-05-19T04:36:56.723 に答える