我正在开发一个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\0");
subDept.forEach( (name, id) -> System.out.println(name + " -> " + id));
输出:销售 - &gt; 6测试 - &gt; 1培训 - &gt; 2
现在,我已经更改了TreeMap以获取Comparator并尝试获取子图。
TreeMap<String, Integer> dept = new TreeMap<>(Comparator.reverseOrder());
SortedMap<String, Integer> subDept = dept.subMap("Training", "Sales\0");
但是,我得到了结果
培训 - &gt; 2测试 - &gt; 1
而不是
培训 - &gt; 2测试 - &gt; 1销售 - &gt; 6
为什么在使用反向比较器时,不将\ 0附加到子图的第二个参数使其成为闭合范围?或者,我在代码中遗漏了什么?
答案 0 :(得分:2)
如果排序相反,则"Sales\0"
会出现在"Sales"
之前。
追加\0
是一种只适用于字符串的hack,只适用于字典顺序中的字符串。在这种情况下,您必须将字符串更改为按字典顺序排在Sales
之前的字符串,例如Saler
。
更简单,更强大的方法是使用提供的方法获得封闭范围:
dept.subMap("Training", true, "Sales", true)