使用比较器时 TreeMap 行为的 Submap()

Submap() of TreeMap behavior when a Comparator is used

我正在处理 TreeMap。当我 运行 这段代码时,它给了我想要的结果。

TreeMap<String, Integer> dept = new TreeMap<>();

dept.put("Testing", 1);
dept.put("Training", 2);
dept.put("Automation", 3);
dept.put("Web Development", 4);
dept.put("Progamming", 5);
dept.put("Sales", 6);
dept.put("Housekeeping", 7);

SortedMap<String, Integer> subDept = dept.subMap("Sales","Training[=10=]");

subDept.forEach( (name, id) -> System.out.println(name + " -> " +  id));

Output: Sales -> 6 Testing -> 1 Training -> 2

现在,我已将 TreeMap 更改为采用比较器并尝试获取子图。

TreeMap<String, Integer> dept = new TreeMap<>(Comparator.reverseOrder());
SortedMap<String, Integer> subDept = dept.subMap("Training", "Sales[=11=]");

但是,我得到的结果是

Training -> 2 Testing -> 1

而不是

Training -> 2 Testing -> 1 Sales -> 6

为什么在使用反向比较器时,子图的第二个参数附加\0不使其成为封闭范围?或者,我是否遗漏了代码中的某些内容?

颠倒顺序后,"Sales[=11=]" 排在 "Sales" 之前。

追加 [=13=] 是一种仅适用于字符串的 hack,并且仅适用于按字典顺序排列的字符串。对于这种情况,您必须将字符串更改为按字典顺序排列在 Sales 之前的字符串,例如Saler.

一种更简单、更可靠的方法是使用提供的方法来获取封闭范围:

dept.subMap("Training", true, "Sales", true)