在java中排序整数首先返回负数?
我有一个这样的比较器:在java中排序整数首先返回负数?,java,sorting,Java,Sorting,我有一个这样的比较器: Collections.sort( sortedPlayers, new Comparator<RoundPlayer>() { public int compare(RoundPlayer p1, RoundPlayer p2) { return p1.getScore() - p2.getScore(); } }); Collections.sort(sortedPlayers,新比较器() { 公共整数比较(Ro
Collections.sort( sortedPlayers, new Comparator<RoundPlayer>()
{
public int compare(RoundPlayer p1, RoundPlayer p2)
{
return p1.getScore() - p2.getScore();
}
});
Collections.sort(sortedPlayers,新比较器()
{
公共整数比较(RoundPlayer p1、RoundPlayer p2)
{
返回p1.getScore()-p2.getScore();
}
});
排序玩家是玩家对象的列表,他们返回的分数是整数,例如,200、-300、1000等
比较器的目标是对它们进行排序,使其降序为1000、200、-300
然而,这个比较器似乎返回了不稳定的结果。通常先出现负数。只需反转当前的返回值即可 样本
return p2.getScore() - p1.getScore(); //will sort in descending order
如果您想按降序排序,请考虑使用
包装<代码>比较器< /代码>。 还要注意,由于整数溢出,将这两个值相减是一个坏主意。您的比较
逻辑是p1.getScore()-p2.getScore()
。考虑
p1.score=2147483647,p2.score=-2147483648,您的比较器将返回-1,错误地指示p1的分数小于p2的分数
正确的逻辑是测试并返回-1、0和1。更好的是,Integer
已经实现了这个逻辑,因此您可以简单地委托给它的compareTo
方法
return Integer.valueOf(p1.getScore()).compareTo(Integer.valueOf(p2.getScore());
它是不稳定的还是按升序排列的?它看起来不稳定,但是它的设置方式,我只能用少数玩家的分数来测试它。在自然顺序中,负数总是排在正数之前。我几乎想知道它是不是按数量级排序,而不是按顺序排序。。。。您能提供一个输入示例和相应的输出吗?
getScore()
的返回类型是什么?我在谷歌上搜索了“android排序负数对象列表”,她告诉我第一个结果是你的精彩解释。这似乎是一个罕见的问题,但我试图根据MediaStore文件的Bucket ID对其进行排序,由于出现错误,我注意到Bucket ID的负值可能是问题的根源。你的信息对我帮助很大。