我正在将文本文件中的游戏分数读入ArrayList。 ArrayList中的每个项目都是一个带有2个索引的字符串数组,其中一个存储玩家的名字,另一个存储得分。排列数组数组列表
从这里通过分数将列表按数字顺序排序的最佳方式是什么?为了显示高分?
谢谢!
我正在将文本文件中的游戏分数读入ArrayList。 ArrayList中的每个项目都是一个带有2个索引的字符串数组,其中一个存储玩家的名字,另一个存储得分。排列数组数组列表
从这里通过分数将列表按数字顺序排序的最佳方式是什么?为了显示高分?
谢谢!
它应该是这个样子,假设得分存储在索引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中获取两个元素,并提供确定哪个元素是第一个元素的方法。
如果您不是被迫使用数组来存储分数,那么我建议使用专用的模型类,它实现了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]
你是什么意思与 “最佳”?有很多方法,一些简单,一些复杂,他们所有的努力相比,只使用像Collections.sort – 2014-11-24 23:49:00
这样的内置分类器,你可以使用'Collections.sort()'并编写你自定义的'比较器'。 – BatScream 2014-11-24 23:49:24
@ Mike'Pomax'Kamermans我的意思是最简单的。我如何在这里使用Collections.sort? – cogm 2014-11-24 23:53:42