gpt4 book ai didi

java - 当值在范围内时返回键

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:48 25 4
gpt4 key购买 nike

我有一个大型数据集,其中的值是按递增顺序排序的非重叠范围。范围之间有空洞,键(类型为 long)可以分配给多个范围:

[100,300] K1
[310,400] K1
[401,600] K2
[650,1000] K3
...

我需要找到给定值的键。如果值不属于任何范围,我应该返回 0。

我的方法是构建

NavigableMap<Long, Range> map = new TreeMap<>();

然后

map.put(K1, new Range(100,300);
...

这会产生一个相当大的 map ,该 map 按键排序。这不是我想要的,因为我更希望有一个按范围值排序的 map ,以便我可以轻松地进行二进制搜索。我的问题是我不知道如何使用此映射来查找给定值的键。例如,值 101 应返回 K1,500 应返回 K2,301 应返回 0。有什么方法可以使用 NavigableMap 实现我想要的结果,还是我使用了错误的方法?

最佳答案

由于您已声明范围不能重叠但可能有间隙,因此您应该使用 NavigableMap<Range,Long>Range仅使用 hashCode 范围下限的表示和 equals实现。

请注意,我在 NavigableMap 中颠倒了泛型类型的顺序根据您在代码示例中显示的内容。

要搜索一个值,您需要小于搜索键的最大条目(即具有最大下限的条目)。

相反,如果您在 Range 中使用上限对象,您希望最小的条目大于搜索键。

找到合适的Map之后由于可能存在间隙,您必须仔细检查键值是否确实在范围内。

关于java - 当值在范围内时返回键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35666249/

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