我正在阅读有关 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/