【问题标题】:Removing smallest key from treeMap从treeMap中删除最小的键
【发布时间】:2013-12-25 05:16:31
【问题描述】:

我正在使用 treeMap 创建一个评分系统,我只想显示前 3 个结果。
当玩家输入第 4 个结果时(如果它大于当前最小值)我如何让它删除最小值并用新值替换它。

到目前为止,我的代码对分数进行了排序:

 Map<Integer, String> treeMap = new TreeMap<Integer, String>(new MyCopr());
    treeMap.put(name1val, name1);
    treeMap.put(name2val, name2);
    treeMap.put(name3val, name3);
    treeMap.put(tempval, tempname);

    for (Map.Entry<Integer, String> entry : treeMap.entrySet()) {
        playername1.append("Key : " + entry.getKey() + " Value : "
                + entry.getValue() + "\n");
    }
}

class MyCopr implements Comparator<Integer> {
    @Override
    public int compare(Integer lhs, Integer rhs) {
        return rhs.compareTo(lhs);
    }
}

从这里我可以做些什么来替换最小值?谢谢。

【问题讨论】:

  • 难道你不能只是添加新值然后在说完之后就获得前三名吗?

标签: java android algorithm treemap scoring


【解决方案1】:

我会使用一组分数(像这样) -

private static int MAX_SCORES = 3;
private SortedSet<Score> scores = new TreeSet<Score>();

public Set<Score> getScores() {
  return scores;
}

public void addScore(String name, int score) {
  scores.add(new Score(name, score));
  while (scores.size() > MAX_SCORES) {
    scores.remove(scores.first());
  }
}

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

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

  public int compareTo(Score obj) {
    if (this == obj) {
      return 0;
    }
    if (this.score < obj.score) {
      return -1;
    } else if (this.score > obj.score) {
      return 1;
    }
    return name.compareTo(obj.name);
  }

  public String toString() {
    return name + " - score = " + score;
  }
}

然后像这样使用它......

System.out.println(obj.getScores());
obj.addScore("Player 1", 1);
obj.addScore("Player 2", 2);
obj.addScore("Player 3", 3);
System.out.println(obj.getScores());
obj.addScore("Player 4", 4);
System.out.println(obj.getScores());

产生这个(当我运行它时) -

[]
[Player 1 - score = 1, Player 2 - score = 2, Player 3 - score = 3]
[Player 2 - score = 2, Player 3 - score = 3, Player 4 - score = 4]

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多