Java 找到;“最近的浮动键”;在给定浮点值的HashMap中
拥有一个Java 找到;“最近的浮动键”;在给定浮点值的HashMap中,java,collections,hashmap,Java,Collections,Hashmap,拥有一个LinkedHashMap。此HashMap的键是以秒为单位的时间点(如0.031f或1.4021f)。可以有成千上万的条目 给定一个float值,比如0.6102f,我需要找到最接近它的HashMap键(比如0.6002f,假设它在键集中) 一个简单的答案是逐个检查HashMap的键。毕竟,条目的排序是正确的。但是我想这是一个O(n)操作,这可能不是一个好主意,因为我必须每秒执行几次搜索 有没有一种有效的方法可以找到给定浮点值的HashMap的“最近的浮点键”?没有有效的方法可以使用H
LinkedHashMap
。此HashMap的键是以秒为单位的时间点(如0.031f
或1.4021f
)。可以有成千上万的条目
给定一个float
值,比如0.6102f
,我需要找到最接近它的HashMap键(比如0.6002f
,假设它在键集中)
一个简单的答案是逐个检查HashMap的键。毕竟,条目的排序是正确的。但是我想这是一个O(n)
操作,这可能不是一个好主意,因为我必须每秒执行几次搜索
有没有一种有效的方法可以找到给定浮点值的HashMap的“最近的浮点键”?没有有效的方法可以使用
HashMap来实现这一点;i、 e.没有比O(N)
更好的了,其中N
是地图中的条目数
但是,如果您切换到使用TreeMap
,您可以在O(logN)
中找到具有最近键的条目。您需要使用floorEntry
和ceilingEntry
,然后测试两个输入键中哪一个最接近您的给定键
毕竟,条目的排序是正确的
实际上,HashMap
中的键没有排序。某些键类型的hashCode()
实现可能会使HashMap
键被排序,但您看到的是一个工件。如果您不必使用HashMap,您可能会对使用树映射感兴趣。