簡體   English   中英

在Java中對整數進行排序會首先返回負數嗎?

[英]Sorting ints in java returns negative numbers first?

我有一個類似的比較器:

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

排序的玩家是玩家對象的列表,它們返回的分數是整數,例如200,-300、1000等。

比較器的目標是對它們進行排序,使它們以降序排列,即1000、200,-300。

但是,此比較器似乎返回了不穩定的結果。 通常會先出現負數。

只需反轉您當前的退貨價值

樣品

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

如果要按降序排序,請考慮使用Collections.reverseOrder(Comparator cmp)包裝Comparator器。

另請注意,由於整數溢出,將兩個值相減是個壞主意。 您的compare邏輯是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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM