【问题标题】:How to search through values in a HashMap to find the highest value, and return both that value and key?如何在 HashMap 中搜索值以找到最高值,并返回该值和键?
【发布时间】:2014-10-29 23:00:56
【问题描述】:

我正在编写一个需要比较值的代码,但我对 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 语句通过。然后它将保存该键和值,然后停止。有什么建议吗?

编辑:我查看了以前的问题,他们似乎只是试图找到与设定值关联的键,而我试图比较所有值,并保存与这些值关联的键。如有必要,应多次重写最高编号和最高密钥。

【问题讨论】:

  • 感谢 AntonH 更正“Double.MIN_VALUE”。如果值为负数,这将有所帮助。原来我也忘记了一行代码。

标签: java for-loop hashmap compare key


【解决方案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。

【讨论】:

  • 呸,真是个愚蠢的错误!忘记再次存储最高值。当然是一行代码。谢谢!
【解决方案2】:

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

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

正如 AntonH 评论的那样,最好使用 Double.MIN_VALUE 而不是 0 作为起始值,以防万一所有值都是负数。

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2018-08-25
    • 2012-01-15
    • 2023-02-22
    • 2021-05-16
    相关资源
    最近更新 更多