拥有LinkedHashMap<Float, Integer>
。此HashMap的键是以秒为单位的时间点(如0.031f
或1.4021f
)。可能有数十万个条目。
给定float
值,比如0.6102f
,我需要找到最接近它的HashMap键 (如0.6002f
可能,假设&# 39; s在密钥集中。)
一个简单的答案是按键检查HashMap的键。毕竟,条目恰好正确排序。但我想这是一个O(n)
操作,这可能不是一个好主意,因为我必须每秒多次执行此搜索。
是否有一种有效的方法来找到最近的浮动键&#34;给出一个浮动的HashMap?
答案 0 :(得分:2)
使用HashMap
无法有效地执行此操作;即没有比O(N)
更好的地方,其中N
是地图中的条目数。
但是,如果您切换到使用TreeMap<Float, Integer>
,则可以在O(logN)
中找到包含最近密钥的条目。您需要使用floorEntry
和ceilingEntry
,然后测试哪两个输入键最接近您的给定键。
毕竟,这些条目碰巧正确排序。
实际上HashMap
中的键没有排序。某些键类型的hashCode()
实现可能会显示HashMap
键已排序,但您看到的是一个工件。