我有一张 map ,其中存储了玩家姓名和我更新的分数,一切都很好。
public static Map<String, Integer> map = new HashMap<String, Integer>();
第一轮游戏结束后,我想从 map 上删除最低分数。例如, map 上可能有 8 名玩家,其中 4 人得分为 10,其他 4 人得分为 0,我如何根据得分最高的玩家将 map 分成两半并删除排名最后的 4 名玩家?请记住,8 名玩家没有定义,它可以是任何数字
最佳答案
似乎没有人意识到这不是一个映射。如果您查看高分,就会发现名称可能重复。你想要的是一个 NavigableSet ,其中
class HighScore implements Comparable<HighScore> {
private static final AtomicLong NEXT_ID = new AtomicLong(1);
protected final String name;
protected final long id = NEXT_ID.getAndIncrement();
protected final int score;
// ...
public int compareTo(HighScore o) {
int diff = score - o.score;
if (diff != 0) { return diff; }
long idDiff = id - o.id;
if (idDiff < 0) { return -1; }
else if (idDiff > 0) { return 1; }
else { return 0; }
}
}
然后您只需pollFirst()
即可删除。
关于java - 按最高分对 map 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24392592/