使用比较器时 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)
我正在处理 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)