gpt4 book ai didi

java - 获取以数字范围为值的 hashmap 的键

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

我有一个 HashMap<Integer, Float>条目:

 1 -> 0.127
2 -> 0.167
3 -> 0.207
4 -> 0.247
5 -> 0.237
6 -> 0.327
7 -> 0.367
8 -> 0.407
9 -> 0.447
10 -> 0.487
11 -> 0.527
12 -> 0.567
13 -> 0.607
14 -> 0.647
15 -> 0.652

假设我想要 Float 0.465 的键(这不是一个现有值)。 0.465介于 0.447 之间和 0.487 , 所以我想得到 key 10 .

我想到的第一个想法是通过 15 个 if/else if 语句或 switch 语句来实现。但在我看来,这不是很优雅和实用。

还有其他方法吗?

最佳答案

Map 不是合适的数据结构。使用 TreeSet 代替:

TreeSet<Float> numbers = new TreeSet<>();
// populate the set with your numbers, in any order, then

int index = numbers.headSet(n).size() + 1;

这将执行得非常好:TreeSet 在 O(log n) 时间内找到插入点(类似于二进制搜索)并且返回的列表只是一个 View (不会创建新列表) , 所以整个操作是轻量级的。

另请注意,元素不需要以任何特定顺序添加 - TreeSet 在内部维护它们的顺序,因此搜索速度很快。


下面是一些测试代码:

TreeSet<Float> numbers = new TreeSet<>(Arrays.asList(
0.607F, 0.647F, 0.127F, 0.167F, 0.207F, 0.247F, 0.237F, 0.327F,
0.367F, 0.407F, 0.447F, 0.487F, 0.527F, 0.567F, 0.652F));

输出:

10

关于java - 获取以数字范围为值的 hashmap 的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31465876/

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