找到最近的浮动键"在给出Float值的HashMap中

时间:2015-09-19 03:07:53

标签: java collections hashmap

拥有LinkedHashMap<Float, Integer>。此HashMap的键是以秒为单位的时间点(如0.031f1.4021f)。可能有数十万个条目。

给定float值,比如0.6102f,我需要找到最接近它的HashMap键 (如0.6002f可能,假设&# 39; s在密钥集中。)

一个简单的答案是按键检查HashMap的键。毕竟,条目恰好正确排序。但我想这是一个O(n)操作,这可能不是一个好主意,因为我必须每秒多次执行此搜索。

是否有一种有效的方法来找到最近的浮动键&#34;给出一个浮动的HashMap?

1 个答案:

答案 0 :(得分:2)

使用HashMap无法有效地执行此操作;即没有比O(N)更好的地方,其中N是地图中的条目数。

但是,如果您切换到使用TreeMap<Float, Integer>,则可以在O(logN)中找到包含最近密钥的条目。您需要使用floorEntryceilingEntry,然后测试哪两个输入键最接近您的给定键。

  

毕竟,这些条目碰巧正确排序。

实际上HashMap中的键没有排序。某些键类型的hashCode()实现可能会显示HashMap键已排序,但您看到的是一个工件。

相关问题