关于java:我应该为高分列表使用什么数据结构?

What data structure should I use for a high score list?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to sort a Map on the values in Java?
how to sort Map values by key in Java

我试图跟踪分数,我需要能够将分数分类为非升序,而不会使键和值超出范围。 我的第一个想法是使用地图,但我真的很难找到一种方法来保持地图按值排序。 值都是Integer对象。 我该如何排序这样的高分榜?


这是Microsoft /亚马逊求职面试类型的问题。
您可以使用优先级队列,在其他队列中将得分最高作为队列的第一个元素。 将节点创建为key | value对。 以分数值维护密钥顺序的方式实现它,并实现队列。

提供更多细节

这是您的Node实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Node{

    private String name;        // the name
    private double score;       // assuming you're using double

    public Node(String name, double score){
        this.name = name;
        this.score = score;         // assuming negative scores are allowed
    }
    public void updateScore(double score){
        this.score += score;
    }
}

当您使用PriorityQueue时,根据得分值制作Comparison。 根据Java API,如果需要搜索/更新,则为O(1):

Implementation note: this implementation provides O(log(n)) time for
the enqueing and dequeing methods (offer, poll, remove() and add);
linear time for the remove(Object) and contains(Object) methods; and
constant time for the retrieval methods (peek, element, and size).

阅读API,我想您可能需要覆盖Comparator comparator(),或至少根据您的需要进行修改。 应该这样做。