【问题标题】:How to get key of a specific value in Map如何在 Map 中获取特定值的键
【发布时间】:2014-06-16 08:48:48
【问题描述】:

我正在尝试在 Map 中找到最大值并获取其对应的键。

这是我的 maxMin =

{3=0.1518355013623417, 2=0.11815917264727849, 1=0.2467498197744391, 4=0.04812703040826949}

for(String keyset: maxMin.keySet()){
 double values = maxMin.get(keyset);
  if (values < min) {
       min = values;
  }
  if (values > max) {
       max = values;
  }
}

我找到了最大值,但是如何获得对应的键?

【问题讨论】:

标签: java map hashmap


【解决方案1】:
String minkey = null;
String maxkey = null;
for(String keyset: maxMin.keySet()){
  double values = maxMin.get(keyset);
  if (values < min) {
     min = values;
     minkey = keyset;
  }
  if (values > max) {
     max = values;
     maxkey = keyset;
  }
}

【讨论】:

    【解决方案2】:

    这为您提供了最低和最高值的键:

    final Map<String, Integer> map = new HashMap<>();
    
    map.put("lowest", 1);
    map.put("5", 5);
    map.put("highest", 10);
    map.put("3", 3);
    
    Map.Entry<String, Integer> min = null;
    Map.Entry<String, Integer> max = null;
    
    for (final Map.Entry<String, Integer> entry : map.entrySet()) {
        if ((null == min) && (null == max)) {
            min = entry;
            max = entry;
            continue;
        }
    
        if (entry.getValue() < min.getValue()) {
            min = entry;
        }
    
        if (entry.getValue() > max.getValue()) {
            max = entry;
        }
    }
    
    System.out.println("The key for the lowest value is: " + min.getKey());
    System.out.println("The key for the highest value is: " + max.getKey());
    

    【讨论】:

      【解决方案3】:
      How about this:
      int pos = 0;
      int maxPos = 0;
      for(String keyset: maxMin.keySet()){
       pos = pos + 1;
       double values = maxMin.get(keyset);
        if (values < min) {
             min = values;
        }
        if (values > max) {
             max = values;
             maxPos = pos;
        }
      }
      
      Set<Integer> keySet = maxMin.keySet();
      List<Integer> keyList = new ArrayList<Integer>(keySet);
      Integer key = keyList.get(maxPos);
      

      【讨论】:

      • -1 因为:对密钥集的 2 次访问和一个很容易避免的 ArrayList 的创建。
      • 同意,我误解了事情,就像你给出的解决方案一样简单:)
      【解决方案4】:
          for (Entry<String, Double> entry : maxMin.entrySet()) {
              if (entry.getValue() < min) {
                  min = entry.getValue();
                  minKey = entry.getKey();
              }
              if (entry.getValue() > max) {
                  max = entry.getValue();
                  maxKey = entry.getKey();
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 2016-09-06
        相关资源
        最近更新 更多