-1

重複の可能性:
Javaの値でMap <Key、Value>をソートする方法は?

私は持っていtreemap<Integer,Float>ます。浮動小数点数でマップを並べ替えるにはどうすればよいですか?

手っ取り早い方法はありますか?または、マップのコンパレータを作成する必要がありますか?

4

2 に答える 2

5

Map実際には、実装を値で (正確に、確実に) ソートすることはできません。(そうでないと主張する実装は、ハック的で、信頼性が低く、非常に奇妙な動作をすることがあります。重複した値を拒否し、マップにないキーを見ようとすると例外をスローし、バッキング マップが変更されると回復不能なほど破損します...)

代わりに、エントリのリストを明示的に並べ替えます。

List<Map.Entry<Integer, Float>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Float>>() {
  public int compare(Map.Entry<Integer, Float> e1, Map.Entry<Integer, Float> e2){
    return e1.getValue().compareTo(e2.getValue());
  }
});

必要に応じて、これを に入れることができますLinkedHashMap:

Map<Integer, Float> sortedMap = new LinkedHashMap<Integer, Float>();
for (Map.Entry<Integer, Float> entry : list) {
  sortedMap.put(entry.getKey(), entry.getValue());
}
于 2012-12-14T18:36:15.620 に答える
2

最も簡単な解決策は、代わりにLinkedHashMapを使用し、値で並べ替えることです。これを参照してください: LinkedHashMapをその値クラスのフィールドでソートする方法は?

于 2012-12-14T18:39:59.313 に答える