在java中排序整数首先返回负数?

时间:2014-06-25 21:21:31

标签: java sorting

我有一个像这样的比较器:

Collections.sort( sortedPlayers, new Comparator<RoundPlayer>()
{
    public int compare(RoundPlayer p1, RoundPlayer p2)
    {
        return p1.getScore() - p2.getScore();
    }
});

已排序的玩家是玩家对象列表,他们返回的分数是200,-300,1000等等。

比较器的目标是对它们进行排序,使它们降序为1000,200,-300。

然而,这个比较器似乎返回了不稳定的结果。通常首先出现负数。

2 个答案:

答案 0 :(得分:4)

只需撤消您目前拥有的返回值

<强>样品

return p2.getScore() - p1.getScore(); //will sort in descending order

答案 1 :(得分:3)

如果您想按降序排序,请考虑使用Collections.reverseOrder(Comparator cmp)包裹Comparator

另请注意,由于整数溢出,减去这两个值是一个坏主意。您的compare逻辑为p1.getScore() - p2.getScore()。考虑 p1.score = 2147483647,p2.score = -2147483648,您的比较器将返回-1,错误地指示p1的分数小于 p2的分数。

正确的逻辑是测试&lt;,=和&gt;,返回-1,0和1.更好的是,Integer已经实现了这个逻辑,所以你可以简单地委托给它compareTo方法

return Integer.valueOf(p1.getScore()).compareTo(Integer.valueOf(p2.getScore());