2012-09-01 1 views
5

可能性の重複:私のプロジェクトで
How to sort a Map<Key, Value> on the values in Java?java HashMapソート<String、Integer>。どのようにそれを並べ替えるには?

、私は)この

のHashMap度=新しいHashMapの(のようなHashMapをとっています。

私が持っていると仮定します。

degree.put("a",5); 
degree.put("b",2); 
degree.put("c",4); 
degree.put("d",2); 
degree.put("e",3); 
degree.put("f",5); 

今、私は整数

ソートHashMapのがあるべき値が与えられに従って、このリストをソートする必要があります。

{a = 5、f = 5、c = 4、e = 4、 b = 4、d = 2}

どうすればいいですか?

+0

整数値に基づいてソートされたオリジナルのHashMapは実際には{a = 5、f = 5、c = 4、e = 3、b = 2、d = 2}のように見えます。 –

+0

これをチェックしてください。http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java – SiB

答えて

11

は、の順不同であり、コレクションである。ソート順はありません。 TreeMapでも、値ではなくキーでソートされます。あなたが値のソート順序でソートされたリストを作成したい場合は

、あなたはあなたのHashMapを反復し、すべてのエントリを挿入し、そのようArrayList<Map.Entry<String,Integer>>として、適切なオブジェクトを作成する必要があり、その後でCollections.sortを呼ぶことにします照合機能

4

ソートマップが必要な場合は、HashMapが最適なアプローチではありません。

ソートされているので、TreeMapをご覧になることをお勧めします。彼らはこの答えにそうであるようにあなたは、代わりにキーの値を比較するコンパレータを設定することができます。

https://stackoverflow.com/a/1283722/975959

+0

そのツリーマップ上で.get()を呼び出すことをお勧めしません。それが価値観を見ているならば。 – bmargulies

0

あなたは(元から新しいハッシュマップを構築するためにinsertion sortを行うことができますが、X2メモリを取り、非常に非効率的です)。だから、ハッシュマップの.get()と.set()メソッドを、nが要素の数であるn * n(最悪の場合)の時間近く使用する必要があります。

1
ArrayList<Integer> sortedHashMap=new ArrayList<Integer>(); 

for("your Object" m : degree.values()) 
{ 
     sortedHashMap.add(m); 
} 

collections.sort(sortedHashMap); 

だから、ソートされたhashMapとしてあなたのハッシュマップをプリントすることができます!

関連する問題