我不了解NavigableMap.floorEntry()
和ceiling Entry()
的工作方式。
Oracle只是写关于ceilingEntry(key)的内容:
返回与最小键关联的键值映射
大于或等于给定的键;如果没有这样的键,则返回null
键。
通过实验,我了解到,如果我使用整数键(NavigableMap
)定义NavigableMap<Integer, Anything>
,则floorEntry(keyArg)
和ceilingEntry(keyArg)
始终返回具有给定参数(keyArg)*
的条目
我知道-它像floor and ceiling functions in math一样工作:那些函数返回最接近的整数(如果没有给出整数参数),给定整数参数,它们总是返回给定的参数。
我认为(基于数学中的发言权/条目定义)以下代码段将返回"integer"
1.0
,2.0
等。
Double 2.0
不是整数。但是ceilingEntry(keyArg)
与Integer键没有用,如果它也不与Double键一起使用(还返回其参数键),那么它的用法,用途和工作用例?
NavigableMap<Double, String> m = new TreeMap<>();
m.put(1.3, "hey");
m.put(1.5, "hey2");
m.put(1.62, "hey3"); // not this
m.put(1.6, "hey3"); // argument given to ceilingEntry
m.put(1.68, "hey3"); // not this
m.put(1.7, "hey4"); // not this
m.put(2.0, "hey4"); // not this
m.put(1.0, "hey4");
m.put(3d, "hey4"); // not this
m.put(0d, "hey4");
// WHAT THEN ???
System.out.println(m.ceilingEntry(1.6)); // OUTPUT: 1.6=hey3
// I guess, to get something different from argument
//I shall give something not equal to any key as argument
System.out.println(m.ceilingEntry(1.601)); // 1.62=hey3
我知道了。无论键类型如何,如果地图中已经确切存在这样的键,则ceilingEntry只会返回其参数。
仅当给定参数不存在于map中(作为键)时,它才会返回任何不同的内容。在这种情况下,ceilingEntry将返回地图中最接近的键(在ceilingEntry的情况下-升序搜索(朝正无穷大))。
因此,它与纯数学
floor/ceiling
完全不同-Java不在寻找最接近的整数,Java正在寻找最接近的现有键。 Java不在乎,这个最接近的键是整数还是0.000786
(最接近于0.000785
或0.7
之类的参数) 最佳答案
Ceiling的作用恰如其分:返回与大于或等于给定键的最小键关联的键-值映射关系;如果没有这样的键,则返回null。与整数和双精度无关。因此,如果我在地图2和5中有2个键,并且我调用Ceiling(3),我将得到5