26

TREEMAPを使用するタイミングと理由を教えてください。このリンクをたどりまし たが、答えが見つかりませんでした。

私の考えでは、ツリーマップを使用してキーに従ってデータを並べ替えますが、他の方法でも同じことができます。

4

4 に答える 4

29

辞書を実装してアルファベット順に印刷するとします。TreeMapとTreeSetを組み合わせて使用​​できます。

public static void main(String args[]) {
    Map<String, Set<String>> dictionary = new TreeMap<>();
    Set<String> a = new TreeSet<>(Arrays.asList("Actual", "Arrival", "Actuary"));
    Set<String> b = new TreeSet<>(Arrays.asList("Bump", "Bravo", "Basic"));

    dictionary.put("B", b);
    dictionary.put("A", a);

    System.out.println(dictionary);
}

すべての並べ替えは自動的に行われ、次のように出力されます。

{A = [アクチュアリー、アクチュアリー、到着]、B = [ベーシック、ブラボー、バンプ]}

もちろん、構造を手動で並べ替えることもできますが、TreeMap / Setを使用すると、より効率的になり、コードの行数(=バグの数)が減り、読みやすくなります。

于 2012-12-07T11:18:34.870 に答える
8

オブジェクトを何らかのキーでソートする効率的な方法です。ランダムアクセスも重要な場合は、TreeMap が答えです。このデータ構造を使用すると、順番に繰り返すことができます。

ランダムアクセスが必要ない場合は、ソートされたセット/バッグまたはリストを使用してください。

JavaにSortedListがないのはなぜですか?

于 2012-12-07T11:13:30.177 に答える
6

リンク先のjavadocは、それがナビゲート可能ソートされたマップインターフェースの実装であることを明確に述べています。この機能が必要な場合に使用します。

于 2012-12-07T11:12:15.360 に答える
4

ツリーマップ

赤黒木ベースの NavigableMap 実装。マップは、使用されるコンストラクターに応じて、キーの自然順序付けに従って、またはマップ作成時に提供される Comparator に従ってソートされます。

この実装では、containsKey、get、put、remove 操作の保証された log(n) 時間コストが提供されます。アルゴリズムは、Cormen、Leiserson、および Rivest のアルゴリズム入門にあるものの適応です。

昇順だけでなく順序付きキーが必要な場合は、このデータ構造を使用 して、独自の並べ替えロジックを作成するcomparatorためにコンストラクターに渡すことができます。TreeMap(Comparator<? super K> comparator)同様に、それは一種の自己均衡二分探索木です。

于 2012-12-07T11:09:18.277 に答える