Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找到;“最近的浮动键”;在给定浮点值的HashMap中_Java_Collections_Hashmap - Fatal编程技术网

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,您可能会对使用树映射感兴趣。