TreeMap踩坑

2023-09-03 08:39:06 浏览数 (4)

不降志,不屈身,不追赶时髦,也不回避危险。──胡适

今天使用TreeMap踩坑了

代码如下:

代码语言:javascript复制
    @Test
void test() {
    Map<Integer, Object> map = new TreeMap<>(Comparator.comparing(i -> i % 2 == 0));
    map.put(2, 0);
    map.put(1, 0);
    map.put(3, 0);
    System.out.println(map);
}

输出结果却是

代码语言:javascript复制
{1=0, 2=0}

这是因为Comparator里计算结果重复导致的,即便我们的key并不相同,也会被覆盖。。。

于是我们可以指定计算结果相同时策略:

代码语言:javascript复制
@Test
void test() {
    Map<Integer, Object> map = new TreeMap<>(Comparator.<Integer, Boolean>comparing(i -> i % 2 == 0).thenComparing(Comparator.naturalOrder()));
    map.put(2, 0);
    map.put(1, 0);
    map.put(3, 0);
    System.out.println(map);
}

结果:

代码语言:javascript复制
{1=0, 3=0, 2=0}

1 人点赞