NavigableSet的方法上限非使用比较器返回期望的元素

时间:2014-08-26 22:39:57

标签: java set comparator

这是代码:

    Score alpha = new Score(1,91);
    Score beta = new Score(1,81);
    Score gamma = new Score(5,85);
    NavigableSet<Score> set = new ConcurrentSkipListSet<>(new ScoreComparator());

    set.add(beta); set.add(gamma);

    assertThat(set.size(),is(equalTo(2)));
    assertThat(set.ceiling(alpha), is(equalTo(beta)));

它失败了这个错误:

Expected: is <Score{userId=1, score=81}>
     got: <Score{userId=5, score=85}>

这是比较器:

if(o2.equals(o1)) return 0;
else return o2.getScore() - o1.getScore();

分数使用userId表示equals和hashCode(hashCode只是return userId;

我正在做一些错误的假设,我不知道是否使用天花板来做我想做的事情:检索已经存在于集合中的元素具有相同的userId(当它出现时)。 / p>

1 个答案:

答案 0 :(得分:1)

如果o1&lt; Comparator,则应返回负整数。 O 2。

  

返回:
     第一个参数的负整数,零或正整数小于,等于或大于第二个参数。

因此你应该颠倒顺序:

if (o2.equals(o1)) 
    return 0;
else 
    return o1.getScore() - o2.getScore();