使用更快的算法按值对treemap排序

kfgdxczn  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(415)

我正在尝试创建一个树Map,它按值对已创建的Map进行排序。我现在的代码是:

public static TreeMap<String, Integer> sortedMap(Map<String, Integer> map)
{
    TreeMap<String, Integer> freq = new TreeMap<>(new Comparator<String>() {
        @Override
        public int compare(String s1, String s2)
        {
            return map.get(s1) >= map.get(s2) ? -1 : 1;
        }
    });

    freq.putAll(map);

    return freq;
}

然而,据我所知,这将有一个时间复杂度约为o(n2),并想看看我是否可以使用像合并排序或只是一个因素的方式来排序Map。

wbgh16ku

wbgh16ku1#

你可以用 HashMap 降低通话成本 Comparator .

public static TreeMap<String, Integer> sortedMap(Map<String, Integer> map) {
    Map<String, Integer> hashMap = new HashMap<>(map);
    TreeMap<String, Integer> freq = new TreeMap<>(Comparator.comparing(hashMap::get));
    freq.putAll(map);
    return freq;
}

Map<String, Integer> map = new TreeMap<>(Map.of("four", 4, "three", 3, "two", 2, "one", 1));
System.out.println(map);
TreeMap<String, Integer> result = sortedMap(map);
System.out.println(result);

输出:

{four=4, one=1, three=3, two=2}
{one=1, two=2, three=3, four=4}

相关问题