以下代码的输出是:
public static void main(String[] args) {
String[] s = {"abc", "def", "ghi"};
TreeMap<String, Integer> tm = new TreeMap<>((a, b) -> -a.length() + b.length());
for (String k : s) {
tm.merge(k, 1, Integer::sum);
}
System.out.println(tm);
}
输出应为 {abc=1, def=1, ghi=1}
...输出应该是 {abc=1, def=1, ghi=1}
没有理由期待这种行为。每个比较操作都会为样本数据生成零(即“等于”),并且规范(即 Javadoc)中不保证
TreeMap
保留相等键的插入顺序。如果您想保留插入顺序,则需要使用 LinkedHashMap
。