Из-за отсутствия лучшего имени я называю структуру данных, которую я ищу, как «TopScoreMap». Вот это требование. Во-первых, размер карты фиксирован. Например, карте необходимо сохранить только top n записей, которые будут выброшены на эту карту. Top n в терминах его ключей. Так как карта должна быть заказана на ее клавишах, я решил реализовать ее на основе java.util.TreeMap
. Следующее - это то, что я реализовал. Это прошло несколько тестовых случаев. Мои вопросы:Карта TopScore или FilteringMap, отсортированная по ключу
Есть ли существующие структуры данных, которые предоставляют эту функцию?
Если нет, существует ли способ избежать итераций при выполнении
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;
}
}
}
}
}
Collections.sort и посмотреть интерфейс Comparator – Cruncher