如何在HashMap中搜索值以找到最高值,并返回该值和键?

时间:2014-09-05 03:37:36

标签: java for-loop hashmap compare key

我正在编写需要比较值的代码,但对HashMaps来说还是比较新的,我不知道如何搜索保存的所有值。

我尝试做的是找到所有已保存值的最高值。我希望它经历直到第一个条件通过,保存该值和键,并继续直到新值通过if语句条件。

double highestNum = 0.0; // 0 set to the default lowest value; saves highest value
String highestKey = ""; // used to save the key assosciated w/ highest value

for (String high : quantity_hash.keySet()) {
    if (quantity_hash.get(high) > highestNum) {
        highestKey = high;
    }
}

截至目前(我相信),我的代码将搜索值,直到if语句通过。然后它将保存该键和值,然后停止。有什么建议吗?

编辑:我查看过以前的问题,他们似乎只是试图找到与设定值相关联的关键字,而我试图比较所有值,并保存关联的关键字和那些。如有必要,highestNum和highestKey应多次重写。

2 个答案:

答案 0 :(得分:1)

您需要稍加修改才能存储高值:

double highestNum = 0.0; // 0 set to the default lowest value
String highestKey = ""; // used to save the key assosciated w/ highest value
for (String key : quantityHash.keySet()) {
    double value = quantityHash.get(key);  // ADDED LINE
    if (value > highestNum) {              // MODIFIED LINE
        highestKey = key;
        highestNum = value;                // ADDED LINE
    }
}

这将遍历并查看所有值。你的代码也会循环,但你只有最高价值的密钥;你没有更新highestNum,所以它保持在0.0。

答案 1 :(得分:1)

尝试更新highestNum变量。将de`修改为body:

double current_value = quantity_hash.get(high);
if ( current_value > highestNum) {
    highestKey = high;
    highestNum = current;
}

正如AntonH评论的那样,最好使用Double.MIN_VALUE代替0作为起始值,以防所有值都为负值。