2012-12-07 6 views
9

いつ誰が使用するか教えてもらえますかTREEMAP。私はThis link を通過しましたが、私の答えは見つかりませんでした。TreeMapを使用する理由と使用方法

私の考えによれば、私たちはあなたのキーに応じてデータをソートするためにトリマップを使用し、他の方法でも同じことを達成できます。

+1

他の方法もありますが、これが最も簡単です。キーバリューペアをソートして他にどのように提案しますか? – jlordo

+0

"私の思うように、キーマップに基づいてデータをソートし、他の方法でもデータをソートすることができます。 - まさに! – xagyg

+0

@jlordoの比較可能なインターフェイスとコンパレータのインターフェイス。 –

答えて

4

TreeMap

Aに基づくRed-BlackツリーNavigableMapの実装。マップは、キーの自然順序付けに従って、またはマップ作成時に提供されるコンパレータによって使用されるコンストラクタに応じてソートされます。

この実装は、containsKey、get、putおよびremove操作のログ(n)時間を保証します。アルゴリズムは、Cormen、Leiserson、Rivestのアルゴリズム入門のアルゴリズムの適応です。

使用このデータ構造をあなたがあなた自身のソートロジックを記述するためにTreeMap(Comparator<? super K> comparator)をコンストラクタにcomparatorを渡すことができます昇順だけでなく、キーを命じ必要です。同様に、自己平衡型バイナリ検索ツリーの一種です。

6

リンク先のjavadocには、navigablesortedのマップインターフェイスの実装が明確に記載されています。この機能が必要なときに使用します。

3

オブジェクトをあるキーで並べ替える効率的な方法です。ランダムアクセスも重要です。このデータ構造を使用すると、順番に反復することができます。

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

Why is there no SortedList in Java?

14

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