Java NavigableMap.ceiling Entry()的具体工作原理是什么?

Java NavigableMap.ceiling Entry()的具体工作原理是什么?,java,ceil,Java,Ceil,我不明白NavigableMap.FloorRentry和天花板入口是如何工作的 Oracle只写了以下内容: 返回与最小键关联的键值映射 大于或等于给定的键,如果没有,则为null 钥匙 通过实验我了解到,如果我使用整型键NavigableMap定义NavigableMap,floorEntrykeyArg和ceilingEntrykeyArg总是返回带有给定参数keyArg的条目* 我理解这一点——它的工作原理是:如果给定的不是整数参数,则这些函数返回最接近的整数,如果给定的是整数参数,则它

我不明白NavigableMap.FloorRentry和天花板入口是如何工作的

Oracle只写了以下内容:

返回与最小键关联的键值映射 大于或等于给定的键,如果没有,则为null 钥匙

通过实验我了解到,如果我使用整型键NavigableMap定义NavigableMap,floorEntrykeyArg和ceilingEntrykeyArg总是返回带有给定参数keyArg的条目*

我理解这一点——它的工作原理是:如果给定的不是整数参数,则这些函数返回最接近的整数,如果给定的是整数参数,则它们总是返回这个给定参数

根据数学中的楼层/入口定义,我认为下面的代码段将返回整数1.0、2.0等

Double 2.0不是整数。但是ceilingEntrykeyArg对整数键没有用处,如果它也不能使用双键,同时返回参数键,那么它是如何使用的,它的用途和工作用例是什么

    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以升序向正无穷大搜索的情况下返回映射中最近的键


因此,它与纯数学的下限/上限非常不同——java不是在寻找最接近的整数,而是在寻找最接近的现有键。Java不在乎这个最接近的键是整数还是最接近于0.000785或0.7之类的参数的0.000786,它只是按照它说的做:返回一个与大于或等于给定键的最小键相关联的键值映射,如果没有这样的键,则返回null。与整数和双精度无关。因此,如果我在地图2和5中有两个键,我称之为Ceiling3,我将得到5,floorEntry和ceilingEntry的工作方式类似于Math.floor和Math.天花板,如下所示:

数学:

同样,NavigableMap:

Entries:
Alice
Barry         <-- floor(Bert) = Barry
              <-- Key: Bert
Constance     <-- ceil(Bert) = Constance
Dan
ceilingEntryK密钥 返回与大于或等于给定键的最小键关联的键值映射,如果没有这样的键,则返回null

它的工作原理如下

    NavigableMap<Double, String> rankMap = new TreeMap<Double, String>();
    rankMap.put(1.0, "Student1");
    rankMap.put(2.0, "Student2");
    rankMap.put(3.0, "Student3");
    rankMap.put(4.0, "Student4");
    rankMap.put(5.0, "Student5");

    System.out.println(rankMap.ceilingEntry(1.5));//Output 2.0=Student2
    System.out.println(rankMap.floorEntry(1.5)); //1.0=Student1
呃,1.62是大于1.6的最小值
    NavigableMap<Double, String> rankMap = new TreeMap<Double, String>();
    rankMap.put(1.0, "Student1");
    rankMap.put(2.0, "Student2");
    rankMap.put(3.0, "Student3");
    rankMap.put(4.0, "Student4");
    rankMap.put(5.0, "Student5");

    System.out.println(rankMap.ceilingEntry(1.5));//Output 2.0=Student2
    System.out.println(rankMap.floorEntry(1.5)); //1.0=Student1