如何在hashmap中获得2个最大值?例如。我有集合{dare = 10,to = 20,be = 15,different = 10},如果我们手动计算第一个最大值是20键,而第二个最大值是15,键是,到Finding Key associated with max Value in a Java Map我使用:
Map.Entry<String, Float> max1 = null;
Map.Entry<String, Float> max2 = null;
//searching the first biggest value
for(Map.Entry<String, Float> en : TFIDF.entrySet()){
if (max1 == null || en.getValue().compareTo(max1.getValue()) > 0){
max1 = en;
}
}
//searching the second biggest value
for(Map.Entry<String, Float> en : TFIDF.entrySet()){
if (max2 == null || en.getValue().compareTo(max2.getValue()) <= max1.getValue()){
max2 = en;
}
}
但在与max1比较后,该值返回最小值。
答案 0 :(得分:1)
首先,你必须初始化你比较{{1}的结果使用实际值,但max1
和max2
因为每次都会跳过它,然后在第二个循环中compareTo
返回-1,0或1,因此每次都很可能更小。
编辑为了提高代码的可读性,我建议您对条目集进行排序,然后按compareTo
对条目的Comparator
部分进行排序然后获取第一和第二项。
答案 1 :(得分:1)
作为此代码
en.getValue().compareTo(max2.getValue()) <= max1.getValue())
当max2小于max1的值时,将始终为true
我认为你想要的是
if (max2 == null || en.getValue().compareTo(max2.getValue()) > 0
&& en.getValue().compareTo(max1.getValue() < 0)) {
max2 = en;
}
以上将返回第二个最高值。
答案 2 :(得分:0)
这项检查......
if (max2 == null || en.getValue().compareTo(max2.getValue()) <= max1.getValue()){
应该更像是......
if (en != max1 && (max2 == null || (en.getValue().compareTo(max2.getValue()) >0)) {