对数组的数组列表进行排序

时间:2014-11-24 23:47:48

标签: java arrays sorting arraylist

我正在将文本文件中的游戏分数读入ArrayList。 ArrayList中的每个项目都是一个包含2个索引的String数组,一个存储玩家的名字,另一个存储得分。

从这里按照分数将列表排序为数字顺序的最佳方法是什么,以显示高分?

谢谢!

2 个答案:

答案 0 :(得分: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中获取两个元素,并提供一种确定哪一个是第一个的方法。

答案 1 :(得分: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]