我应该将哪种数据结构用于高分榜?

时间:2012-07-14 23:28:25

标签: java sorting map

  

可能重复:
  How to sort a Map<Key, Value> on the values in Java?
  how to sort Map values by key in Java

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

1 个答案:

答案 0 :(得分:1)

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


提供更多详情


这是您的Node实施:

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)
  

实施说明:此实现提供O(log(n))时间   enqueing和dequeing方法(offer,poll,remove()和add);   remove(Object)和contains(Object)方法的线性时间;和   检索方法的持续时间(窥视,元素和大小)。

阅读API,我想你可能需要覆盖Comparator<? super E> comparator(),或至少根据需要修改它。应该这样做。