gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:08:53 26 4
gpt4 key购买 nike

我正在制作 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));

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

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

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

但是,我得到的结果是

Training -> 2 Testing -> 1

而不是

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

为什么在使用反向比较器时,将\0 附加到 submap 的第二个参数不会使其成为闭范围?或者,我在代码中遗漏了一些东西吗?

最佳答案

如果顺序相反,“Sales\0” 位于“Sales” 之前。

附加 \0 是一种仅适用于字符串的 hack,并且仅适用于按字典顺序排列的字符串。对于这种情况,您必须将字符串更改为按字典顺序位于 Sales 之前的字符串,例如销售员

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

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

关于java - 使用比较器时 TreeMap 行为的 Submap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50676808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com