我在我的TreeMap
中使用的一个Comparator
破坏了我想要的TreeMap
行为。请看以下代码:
TreeMap<String, String> treeMap = new TreeMap<>(new Comparator<String>() {
public int compare(String o1, String o2) {
return o1.toLowerCase().compareTo(o2.toLowerCase());
}
});
treeMap.put("abc", "Element1");
treeMap.put("ABC", "Element2");
我认为我做的是创建了一个按键排序且不区分大小写的地图。这两个不同的元素具有非等键(abc
和ABC
),它们的比较将返回0
。我期望只是两个元素的随机排序。然而,命令是:
System.out.println("treeMap: " + treeMap);
导致:treeMap: {abc=Element2}
关键字abc
已被重新赋值为Element2
的值!
有人能解释一下这是怎么发生的,以及是否是TreeMap
的有效文档行为吗?
Comparator
是一个全序。对于 "abc" 和 "ABC" 在你的映射中是什么意思呢?哪个先出现? - Reinstate Monica