gpt4 book ai didi

java - hashmap 的第 n 项

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:27 24 4
gpt4 key购买 nike

HashMap selections = new HashMap<Integer, Float>();

如何获取所有HashMap中Float的第3小值的Integer键?

编辑我为此使用 HashMap

for (InflatedRunner runner : prices.getRunners()) {
for (InflatedMarketPrices.InflatedPrice price : runner.getLayPrices()) {
if (price.getDepth() == 1) {
selections.put(new Integer(runner.getSelectionId()), new Float(price.getPrice()));
}
}

}

我需要深度为 1 的第三个较小价格的转轮

也许我应该用另一种方式实现它?

最佳答案

如果您正在使用 HashMap,Michael Mrozek 用他的问题来解决这个问题右:对于 HashMap,这是非常不典型的情况.也就是说,您可以这样做:

  • 获取Set<Map.Entry<K,V>>来自 HashMap<K,V>.entrySet() .
  • addAllList<Map.Entry<K,V>>
  • Collections.sort自定义列表 Comparator<Map.Entry<K,V>>根据 V 排序.
    • 如果您只需要第三个 Map.Entry<K,V>只有,那么一个O(N) selection algorithm可能就足够了。

//修改后

看起来像selection真的应该是 SortedMap<Float, InflatedRunner> .你应该看看 java.util.TreeMap .

这是一个如何TreeMap 的例子可用于获取第三个最低键:

TreeMap<Integer,String> map = new TreeMap<Integer,String>();
map.put(33, "Three");
map.put(44, "Four");
map.put(11, "One");
map.put(22, "Two");

int thirdKey = map.higherKey(map.higherKey(map.firstKey()));
System.out.println(thirdKey); // prints "33"

另请注意我如何在 int 之间利用 Java 的自动装箱/拆箱功能和 Integer .我注意到你使用了 new Integernew Float在您的原始代码中;这是不必要的。


//另一个编辑

需要注意的是,如果你有多个InflatedRunner同样的价格,只保留一件。如果这是一个问题,并且您想保留所有运行者,那么您可以执行以下操作之一:

  • 如果你真的需要一个多映射(一个键可以映射到多个值),那么你可以:
  • 如果您不需要 map 功能,那么只需要 List<RunnerPricePair> (抱歉,我不熟悉该域名,无法恰当命名),其中 RunnerPricePair implements Comparable<RunnerPricePair> 比较价格。您可以将所有对添加到列表中,然后:
    • Collections.sort列表并获得第三对
    • 使用 O(N) 选择算法

关于java - hashmap 的第 n 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com