2012-04-06 7 views
1

私はウェブ(とStackoverflow)を多く探しましたが、探しているものを正確に見つけることができませんでした。また、その概念を本当に理解できなかった。JavaでTreeMapを利用する

Javaの割り当てとして、いくつかの値を格納するtreeMapがあります。

static Map<String, Double> customers = new TreeMap<String, Double>(); 

もちろん、それは文字列値によって昇順に格納されます。しかし、私はそれがその値をDouble値で昇順に格納することを望みます。これをコンパレータでどうすれば実現できますか?詳細は非常に高く評価されます。

またこの割り当てでは、別の別の値を格納する別のtreeMapがあります。もう一度以下のように宣言してください:

static Map<String, Double> customers = new TreeMap<String, Double>(); 

ストリングで昇順に値を格納するのは問題ありません。私はこれを使って値を出力しますが、Doubleでソートされた昇順に値を出力する必要があります。では、ツリーマップをどのように並べ替えることができますか?ここでも、詳細は非常に高く評価されます。

+0

ソートすることにより、あなたをできるようになる組み込みのマップ実装はありません値。なし。 –

答えて

2

TreeMapを並べ替えることはできません。固定された反復順序があり、TreeMapの構成時に決定されます。別のソート順が必要な場合は、別のデータ構造を使用します。

私はこれを使って値を表示していますが、値を昇順でDoubleでソートする必要があります。

TreeMapのソートについて心配はいりません。マップ内の値のList<Double>を作成し、それらを並べ替えます。

List<Double> values = new ArrayList<Double>(customers.values()); 
Collections.sort(values); 
System.out.println(values); 
+0

優雅な解決策ですが、私はTreeMapを使用する必要があります。とにかくありがとう。 :D –

+0

私はあなたに 'TreeMap'を使用できないと言っていませんでした。余分な作業をしなくてもソートされた値を印刷することはできません。 –

1

別のマップを作成します。

Map<Double, String> values = new TreeMap<Double, String>(); 

、常に(例えばヘルパーメソッド経由)の両方のマップに追加します。メモリの制約がある場合を除き、customersのマップを顧客別にソートし、valuesDoubleの値でソートします。あなたが重複する値を持つことができる場合は、あなたの代わりに、顧客の(要件に応じて、またはセット)のリストを作ることができ

Map<Double, List<String>> values = new TreeMap<Double, List<String>>(); 
+0

@MДΓΓLLLLLL私は知らない - それが私が "できるなら"と言った理由です。 Setは助けになります - これは、(Double)value、(String)によって重複した値です。そうでなければ、最初のマップは役に立たないでしょう(つまり、一部の顧客は上書きされます)。 –

+0

OPの 'customers'マップの逆関数として' Map > 'を使っていることに気がついたので、私はコメントを削除しました。ごめんなさい! –

+0

@MДΓΓLLLLLLいいえ心配する:) –

関連する問題