gpt4 book ai didi

java - 按值对 map 进行排序,需要澄清

转载 作者:行者123 更新时间:2023-12-02 00:30:39 25 4
gpt4 key购买 nike

我知道这个问题已经被问过好几次了,但请帮助我理解一些事情。

您有一张需要按值(value)排序的 map

    Map<String, Integer> m = new HashMap<String, Integer>();
m.put("a", 1);
m.put("b", 13);
m.put("c", 22);
m.put("d", 2);

你调用一个方法来实现它

public static List<String> sortByValue(final Map<String, Integer> unsortedMap) {

List<String> sortedKeys = new ArrayList<String>();
sortedKeys.addAll(unsortedMap.keySet());

Collections.sort(sortedKeys, new MapComparator(unsortedMap));

return sortedKeys;
}

您有一个比较器类

public MapComparator(Map<String, Integer> m) {
this.m = m;
}

@Override
public int compare(String a, String b) {

int x = m.get(a);
int y = m.get(b);

if (x > y)
return x;
if (y > x)
return y;

return 0;

}

这段代码显然是有缺陷的。请帮我理解为什么?

最佳答案

  if (x > y)
return x;
if (y > x)
return y;

return 0;

您应该返回1如果x > y-1如果y > xComparator契约(Contract)规定,如果第一个值小于第二个值,则返回负数;如果第一个值大于第二个值,则返回正数;如果相等,则返回零。

(请注意,就目前情况而言,如果您碰巧使用原始映射中没有的值,此 Comparator 实现将以非常困惑的方式中断。)

更好的是,只需返回 Integer.compare(x, y) ,这一切都会为您完成。 (不过,仅在 Java 7 中。)

关于java - 按值对 map 进行排序,需要澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9170533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com