由于没有更好的名称,我将我正在寻找的数据结构称为“TopScoreMap”。这是要求。首先,地图的大小是固定的。例如,该地图只需要保留将在该地图上抛出的前 n 个条目。就其键而言,排在前 n 位。由于地图应按其键排序,因此我选择基于java.util.TreeMap
. 以下是我已经实施的。这已经通过了一些测试用例。我的问题是:
是否存在提供此功能的现有数据结构?
如果没有,有没有办法在执行时避免迭代
put
?看起来像 O(n^2),最坏的情况。
class TopScoreMap {
TreeMap<Integer, String> map = new TreeMap<Integer, String>();
int max = 0;
public TopScoreMap() {
this(5);
}
public TopScoreMap(int maxCapacity) {
this.max = maxCapacity;
}
public void put(int score, String player) {
if (map.size() < max) {
map.put(score, player);
}
else {
Iterator<Integer> it = map.keySet().iterator();
while (it.hasNext()) {
int currentKey = it.next();
if (currentKey < score) {
map.remove(currentKey);
map.put(score, player);
return;
}
}
}
}
}