在游戏中,我试图保留用户列表并按分数排序,以便我可以在任何给定时间查询列表并返回(例如)按分数排名前十的用户。这个列表应该是线程安全的。我设想使用 userName 字符串作为键,值将是实现 Comparable 并具有 displayName 和 score 等属性的 User 对象。因此,User 对象将具有一个 compareTo 方法,该方法将比较 score 属性以确定其位置。
我正在考虑为此使用 ConcurrentSkipListMap,但据我所知,Map(而不是 Set)使用 key 进行排序。我想让列表按 User 对象的 score 属性排序,但仍然使用 Map 因为我需要能够访问任何给定用户并从线程修改他们的 score 属性。
似乎使用我自己的 Comparator 作为密钥并不能解决我的问题,因为我怀疑我是否可以访问相关的值进行比较。我可以使用 ConcurrentSkipListSet 但访问列表以修改单个用户的分数将是(我想)一项昂贵的操作(由于每次都需要迭代)。
谁能建议如何做到这一点?