TREEMAPを使用するタイミングと理由を教えてください。このリンクをたどりまし たが、答えが見つかりませんでした。
私の考えでは、ツリーマップを使用してキーに従ってデータを並べ替えますが、他の方法でも同じことができます。
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 が答えです。このデータ構造を使用すると、順番に繰り返すことができます。
ランダムアクセスが必要ない場合は、ソートされたセット/バッグまたはリストを使用してください。
リンク先のjavadocは、それがナビゲート可能でソートされたマップインターフェースの実装であることを明確に述べています。この機能が必要な場合に使用します。
赤黒木ベースの NavigableMap 実装。マップは、使用されるコンストラクターに応じて、キーの自然順序付けに従って、またはマップ作成時に提供される Comparator に従ってソートされます。
この実装では、containsKey、get、put、remove 操作の保証された log(n) 時間コストが提供されます。アルゴリズムは、Cormen、Leiserson、および Rivest のアルゴリズム入門にあるものの適応です。
昇順だけでなく順序付きキーが必要な場合は、このデータ構造を使用 して、独自の並べ替えロジックを作成するcomparator
ためにコンストラクターに渡すことができます。TreeMap(Comparator<? super K> comparator)
同様に、それは一種の自己均衡二分探索木です。