java - 在 Java 中按值对映射进行排序

标签 java sorting key

Possible Duplicate:
How to sort a Map<Key, Value> on the values in Java?

这是我的作品:

ArrayList<Map.Entry<Integer, Integer>> suits = new ArrayList<Map.Entry<Integer, Integer>>();
suits.add(new AbstractMap.SimpleEntry(0, 3));
suits.add(new AbstractMap.SimpleEntry(1, 5));
suits.add(new AbstractMap.SimpleEntry(2, 1));
suits.add(new AbstractMap.SimpleEntry(3, 3));
Collections.sort(suits, new Comparator<Map.Entry<Integer, Integer>>() {
  @Override
  public int compare(Entry<Integer, Integer> e1, Entry<Integer, Integer> e2) {
    if (e1.getValue() > e2.getValue())
      return 1;
    else if (e1.getValue() < e2.getValue())
      return -1;
    else if (e1.getKey() > e2.getKey())
      return 1;
    else if (e1.getKey() < e2.getKey())
      return -1;
    else
      return 0;
  }
});

它有效(至少在我包含的简单测试用例上)。它的目的是根据牌的数量(例如 3 黑桃、5 红心、5 方 block 、6 梅花)对一手牌进行排序,然后继续处理我们拥有较少牌的花色(3 黑桃)。

我发现按值对 Map 进行排序的问题很常见,而且我在理解其他地方提供的一些答案时遇到了一些困难,因为我绝对没有接受过正式的编码培训,也没有接受过 Java 培训 - 所以我自己做了一个。 这段代码有什么明显的错误吗?如果它不值得每天 WTF,那对我来说就足够了。

谢谢。

最佳答案

我建议将 TreeMap 与比较器一起使用。你是对的,用 TreeMap 很难按值排序。您可以关注Sort a Map<Key, Value> by values (Java)这建议如何按值排序。

关于java - 在 Java 中按值对映射进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8882205/

相关文章:

Java Swing计时器启动问题

java - 在 JBOSS for DB2 中创建数据源

php - 如何在 PHP 中重新索引数组的值?

java - keyReleased 函数不恢复 java 中的原始背景颜色

java - 如何查找字符串中全角字符的索引?

java - Netbeans MVC Swing JTable ResultSet 数据插入

sorting - XSL 中的条件排序

java - android 数组列表排序

performance - 例如在这个插入排序算法中,我如何证明算法的时间复杂度是 O(n^2)?

java - 从 Guava Multimap 中的值返回键