我应该为高分列表使用啥数据结构? [复制]

Posted

技术标签:

【中文标题】我应该为高分列表使用啥数据结构? [复制]【英文标题】:What data structure should I use for a high score list? [duplicate]我应该为高分列表使用什么数据结构? [复制] 【发布时间】:2012-07-14 08:22:16 【问题描述】:

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

我正在尝试跟踪分数,并且我需要能够将分数按非升序排序,而不会使键和值脱节。我的第一个想法是使用地图,但我真的很难找到一种方法来保持地图按价值排序。这些值都是整数对象。我将如何对这样的高分列表进行排序?

【问题讨论】:

这篇文章似乎描述了您的问题:[***.com/questions/109383/… [1]: ***.com/questions/109383/… 【参考方案1】:

这是一个微软/亚马逊求职面试类型的问题。 您可以使用优先级队列,或者将最高分作为队列的第一个元素。创建一个节点作为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。如果需要搜索/更新,是O(1),根据Java API:

实现说明:此实现提供 O(log(n)) 时间 入队和出队方法(offer、poll、remove() 和 add); remove(Object) 和 contains(Object) 方法的线性时间;和 检索方法(peek、元素和大小)的恒定时间。

阅读 API,我猜您可能需要覆盖 Comparator&lt;? super E&gt; comparator(),或者至少根据您的需要对其进行修改。应该这样做。

【讨论】:

这是一个关于排序地图的问题。 PriorityQueue 有什么关系? @Bohemian 不,不是。这是一个关于哪种数据结构最适合这项工作的问题。 OP 只是解释说他尝试使用地图,而不是他想要基于地图的解决方案。 我对如何使用 PriorityQueue 对整数值进行排序同时仍保持字符串的位置感到有点困惑。 请给我写个小代码sn-p好吗? @SaxSalute 我提供了有关实施的更多细节。您使用的是哪种编程语言?

以上是关于我应该为高分列表使用啥数据结构? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我应该为这个 UDF 使用啥对象,它应该根据列标题在一组数据中查找值?

为啥 list 应该先转换为 RDD 再转换为 Dataframe?有啥方法可以将列表转换为数据框?

在啥情况下我应该使用尝试而不是二叉树/哈希表? [复制]

iOS - 我应该使用啥来保存数据

我应该将我的数据库用户名和密码存储在 PHP 应用程序的啥位置? [复制]

我应该在播放列表实体中使用啥删除规则?