我不了解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.02.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.0007850.7之类的参数)

最佳答案

Ceiling的作用恰如其分:返回与大于或等于给定键的最小键关联的键-值映射关系;如果没有这样的键,则返回null。与整数和双精度无关。因此,如果我在地图2和5中有2个键,并且我调用Ceiling(3),我将得到5

10-07 15:24