[〜#〜] treemap [〜#〜]をいつ、なぜ使用するか教えてもらえますか? このリンク =しかし、私の答えは見つかりませんでした。
私の考えによると、ツリーマップを使用して、キーに従ってデータを並べ替えます。他の方法でも同じことができます。
辞書を実装してアルファベット順に印刷したいとしましょう。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を使用するとより効率的になり、コードの行数(=バグの数)が減り、読みやすくなります。
これは、オブジェクトを何らかのキーでソートする効率的な方法です。ランダムアクセスも重要な場合は、TreeMapが答えです。このデータ構造を使用すると、順番に繰り返すことができます。
ランダムアクセスが必要ない場合は、ソートされたセット/バッグまたはリストを使用してください。
赤黒木ベースのNavigableMap実装。マップは、使用されるコンストラクターに応じて、キーの自然な順序に従って、またはマップの作成時に提供されるコンパレーターによってソートされます。
この実装は、containsKey、get、put、およびremoveの各オペレーションにlog(n)時間のコストを保証します。アルゴリズムは、Cormen、Leiserson、およびRivestの「Introduction to Algorithms」のアルゴリズムを応用したものです。
昇順だけでなくcomparator
をコンストラクタTreeMap(Comparator<? super K> comparator)
に渡して独自のソートロジックを作成できるため、順序付けされたキーが必要な場合は、このデータ構造を使用します。同様に、それは一種の自己均衡二分探索木です。