web-dev-qa-db-ja.com

TreeMapを使用する理由と時期

[〜#〜] treemap [〜#〜]をいつ、なぜ使用するか教えてもらえますか? このリンク =しかし、私の答えは見つかりませんでした。

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

21
Java_Alert

辞書を実装してアルファベット順に印刷したいとしましょう。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を使用するとより効率的になり、コードの行数(=バグの数)が減り、読みやすくなります。

24
assylias

リンク先のjavadocは、それが navigable および sorted マップインターフェースの実装であることを明確に述べています。この機能が必要な場合に使用します。

6
David Soroko

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

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

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

6

TreeMap

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

この実装は、containsKey、get、put、およびremoveの各オペレーションにlog(n)時間のコストを保証します。アルゴリズムは、Cormen、Leiserson、およびRivestの「Introduction to Algorithms」のアルゴリズムを応用したものです。

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