В игре я пытаюсь сохранить список пользователей и отсортировать его по количеству очков, чтобы я мог запросить список в любой момент времени и вернуть (например) десятку лучших пользователей по количеству очков. Этот список должен быть потокобезопасным. Я предполагаю использование строки userName в качестве ключа, а значением будет объект User, который реализует Comparable и имеет такие свойства, как displayName и Score. Следовательно, объект User будет иметь метод CompareTo, который будет сравнивать атрибут Score для определения его позиции.
Я смотрю на использование ConcurrentSkipListMap для этого, но, насколько я могу судить, Map (в отличие от Set) использует ключ для сортировки. Мне бы хотелось, чтобы список сортировался по свойству Score объекта User, но я все еще использую Map, потому что мне нужно иметь доступ к любому данному пользователю и изменять его атрибут Score из потока.
Не похоже, что использование моего собственного компаратора для ключа решило бы мою проблему, так как я сомневаюсь, что у меня будет доступ к связанному значению для сравнения. Я мог бы использовать ConcurrentSkipListSet, но доступ к списку для изменения оценки отдельного пользователя был бы (я мог бы представить) дорогостоящей операцией (из-за необходимости повторения каждый раз).
Кто-нибудь сможет подсказать, как этого добиться?