java - 如何打印出 map 中最大的数字

标签 java

我正在阅读有关 Java 中的 map 的信息。我想浏览一张不同数字的 map 并打印出 map 中最大的 3 个数字。这是我的代码:

public class Test {

    private static int number=0;

    public static void main(String[] args) {

        Map<String,Integer> m = new HashMap<String,Integer>();

        m.put("haha", 1);
        m.put("aa", 2);
        m.put("rewq", 3);
        m.put("la", 12);
        m.put("oia", 10);
        m.put("uyta", 4);
        m.put("jpa", 5);


        for (Entry<String, Integer> e : m.entrySet()) {

            if (e.getValue() > number) {
                number = e.getValue();
            }

        }
        m.values().remove(number);
        System.out.println(number);

        for (Entry<String, Integer> e : m.entrySet()) {

            if (e.getValue() > number) {
                number = e.getValue();
            }

        }
        m.values().remove(number);
        System.out.println(number);


        for (Entry<String, Integer> e : m.entrySet()) {

            if (e.getValue() > number) {
                number = e.getValue();
            }

        }
        m.values().remove(number);
        System.out.println(number);

    }

}

输出是

12
12
12

如何更改代码以使其像这样打印:

12
10
5

谢谢

最佳答案

您的代码存在的问题是,您在相同条件下对相同数字进行三次迭代,而没有重置找到的最大数字。您的代码基本上是找到最大的数字,然后将 map 中的每个项目进行两次比较,以获得更大的数字。当然,它什么也没找到并打印之前找到的最大数字。

你更想要的是:

  • 获取所有值(不是条目集)
  • 对值进行排序
  • 打印出前三个

在 Java 中是:

ArrayList<Integer> values = new ArrayList<Integer>(m.values());
Collections.sort(values);
// turn ascending to descending
Collections.reverse(values);
System.out.println(String.format("%d, %d, %d", values.get(0), values.get(1), values.get(2)));

即使您只需要前三个值,对所有值进行排序也是一些计算开销,但对于少于数千个条目的列表,它可以忽略不计。

关于java - 如何打印出 map 中最大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40266415/

相关文章:

java - 在 JPanel 中重置图形

java - Azure Key Vault 在本地工作但在 Azure 云中收到 403 禁止错误

java - SecurityContextLogoutHandler 的 clearAuthentication 如何不是线程安全的?

java - 将表 Guava 用于 hashbasedTable

Eclipse 调试器 : Variable view when using nested Java HashMap, ArrayList

java - 带有左连接的准备语句

java - 如何在编码时为属性添加前缀

java - 将对象分配给java中的另一个对象

Java:负索引和 OR 逻辑运算符

java - '@>'符号在postgresql中是什么意思?