2014-11-24 89 views
0

我正在將文本文件中的遊戲分數讀入ArrayList。 ArrayList中的每個項目都是一個帶有2個索引的字符串數組,其中一個存儲玩家的名字,另一個存儲得分。排列數組數組列表

從這裏通過分數將列表按數字順序排序的最佳方式是什麼?爲了顯示高分?

謝謝!

+0

你是什麼意思與 「最佳」?有很多方法,一些簡單,一些複雜,他們所有的努力相比,只使用像Collections.sort – 2014-11-24 23:49:00

+3

這樣的內置分類器,你可以使用'Collections.sort()'並編寫你自定義的'比較器'。 – BatScream 2014-11-24 23:49:24

+0

@ Mike'Pomax'Kamermans我的意思是最簡單的。我如何在這裏使用Collections.sort? – cogm 2014-11-24 23:53:42

回答

3

它應該是這個樣子,假設得分存儲在索引1:

Collections.sort(playerList, new Comparator<String[]>(){ 
    @Override 
    public int compare(String[] player1, String[] player2) { 
     return Integer.parseInt(player1[1]) - Integer.parseInt(player2[1]); 
    } 
} 

playerList是你的陣列的列表。此方法將使用提供的Comparator對象爲您排序陣列,正如您看到的那樣,該對象從ArrayList中獲取兩個元素,並提供確定哪個元素是第一個元素的方法。

3

如果您不是被迫使用數組來存儲分數,那麼我建議使用專用的模型類,它實現了Comparable接口。

public class Score implements Comparable<Score> { 
    final String name; 
    final int score; 

    public Score(String name, int score) { 
     this.name = name; 
     this.score = score; 
    } 

    @Override 
    public int compareTo(final Score that) { 
     return that.score - this.score; 
    } 

    @Override 
    public String toString() { 
     return String.format("Score[name=%s, score=%d]", name, score); 
    } 
} 

當前實施方式分類descending。如果您想對ascending進行排序,請將其更改爲return this.score - that.score;

您可以使用類是這樣的:

public static void main(String[] args) { 
    final List<Score> scores = new ArrayList<>(); 
    scores.add(new Score("Mike", 100)); 
    scores.add(new Score("Jenny", 250)); 
    scores.add(new Score("Gary", 75)); 
    scores.add(new Score("Nicole", 110)); 

    Collections.sort(scores); 

    for (final Score score : scores) { 
     System.out.println(score); 
    } 
} 

輸出將是:

Score[name=Jenny, score=250] 
Score[name=Nicole, score=110] 
Score[name=Mike, score=100] 
Score[name=Gary, score=75]