给你一个map,map的key为玩家id,value为玩家分数,现在你需要根据玩家的分数将玩家排名,分数一样,排名相同。用java写出对应代码
时间: 2024-10-19 17:02:28 浏览: 45
在Java中,你可以使用`TreeMap`来存储这样的数据,因为`TreeMap`会自动对键进行排序。如果你想按照分数从高到低排序,可以自定义一个比较器。以下是实现这一需求的代码:
```java
import java.util.*;
class Player {
int playerId;
int score;
// 构造函数和getter/setter...
}
// 自定义一个Comparator,用于玩家分数相同时按ID排序
class ScoreAndIdComparator implements Comparator<Player> {
@Override
public int compare(Player p1, Player p2) {
if (p1.score != p2.score) {
return Integer.compare(p2.score, p1.score); // 降序
} else {
return Integer.compare(p1.playerId, p2.playerId); // ID升序
}
}
}
public void rankPlayers(Map<Integer, Player> players) {
Map<Integer, Player> rankedPlayers = new TreeMap<>(new ScoreAndIdComparator());
for (Player player : players.values()) {
rankedPlayers.put(player.playerId, player);
}
List<Player> sortedList = new ArrayList<>(rankedPlayers.values());
System.out.println("Ranking:");
for (int i = 0; i < sortedList.size(); i++) {
Player player = sortedList.get(i);
System.out.printf("%d. Player %d has a score of %d%n", i + 1, player.playerId, player.score);
}
}
```
在这个代码里,我们首先创建了一个新的`TreeMap`并传入自定义的比较器。然后遍历原始`Map`的所有值(即玩家),并将它们添加到新映射中。最后,我们将`TreeMap`转换回列表,并打印出每个玩家的排名。
阅读全文
相关推荐
















