以下代码的输出是:
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
。
输出
{abc=3}
没有歧义。您使用自定义比较器,它将所有具有“相同长度”的键视为相同的键。最后,长度较大的键将位于开头。
P.S. TreeMap
是
Map
实现,其中键是唯一的,并按给定的 Comparator
排序。