1. ホーム
  2. java

[解決済み] Java TreeMap コンパレータ

2022-03-05 06:09:49

質問

TreeMapのコンパレータが必要です。これはTreeMapのコンストラクタに匿名で書くべきですか?他にどのようにコンパレータを書けばいいでしょうか。現在、Javaは私のコードを好きではありません(私はこれを匿名で行うことができますか?)

SortedMap<String, Double> myMap = 
    new TreeMap<String, Double>(new Comparator<Entry<String, Double>>()
    {
        public int compare(Entry<String, Double> o1, Entry<String, Double> o2)
        {
            return o1.getValue().compareTo(o2.getValue());
        } 
    });

  1. 上記を匿名で行うことはできますか?
  2. 他にどのような方法がありますか?
  3. MyMapをキーではなく値でソートしたい。

どのように解決するのですか?

ソートができない ツリーマップ を値で指定します。

赤黒木ベースのNavigableMapの実装です。マップはキーの自然な順序に従ってソートされるか、マップ作成時に提供されるComparatorによってソートされます(どのコンストラクタが使用されるかによって異なります)。 を用意する必要があります。 comparator に対して Comparator<? super K> ということで、コンパレータはキーで比較する必要があります。

値でソートするには、以下のものが必要です。 ソートセット . 使用方法

SortedSet<Map.Entry<String, Double>> sortedset = new TreeSet<Map.Entry<String, Double>>(
            new Comparator<Map.Entry<String, Double>>() {
                @Override
                public int compare(Map.Entry<String, Double> e1,
                        Map.Entry<String, Double> e2) {
                    return e1.getValue().compareTo(e2.getValue());
                }
            });

  sortedset.addAll(myMap.entrySet());

例を挙げると

    SortedMap<String, Double> myMap = new TreeMap<String, Double>();
    myMap.put("a", 10.0);
    myMap.put("b", 9.0);
    myMap.put("c", 11.0);
    myMap.put("d", 2.0);
    sortedset.addAll(myMap.entrySet());
    System.out.println(sortedset);

出力します。

  [d=2.0, b=9.0, a=10.0, c=11.0]