【问题标题】:Is there a data structure for a list ordered by value?是否有按值排序的列表的数据结构?
【发布时间】:2011-03-21 21:41:24
【问题描述】:

我有一个显示游戏前 10 名得分的 JTable。数据结构如下所示:

    // {Position, Name, Score}
Object[][] data = {
    {1, "-", 0},
    {2, "-", 0},
    {3, "-", 0},
    {4, "-", 0},
    {5, "-", 0},
    {6, "-", 0},
    {7, "-", 0},
    {8, "-", 0},
    {9, "-", 0},
    {10, "-", 0}
};

我希望能够以正确的顺序向这个数组添加一个新分数(所以如果它是第三高的,它将被放在索引 2 处)。然后我会再次将此列表截断到前 10 名并更新表格。

我知道通过循环和检查来做到这一点很简单,但我想知道是否有合适的数据结构更适合按值排序的数据?还是简单的二维数组是唯一/最好的?

【问题讨论】:

    标签: java list map set


    【解决方案1】:

    TreeSet 与自定义比较器一起使用。

    此外,您不应使用多维数组,使用地图(名称 -> 分数)或自定义对象

    【讨论】:

    • +1。显然,可以编写一个跟踪十个最高元素的包装列表,但老实说,除非存在严重的性能问题,否则坚持使用内置库是可行的方法!
    • 太棒了,谢谢。我知道肯定有比数组更好的方法!
    【解决方案2】:

    嘿,如果您的数组已排序,您可以使用Collections.binarySearch()Arrays.binarySearch() 方法来指导您在哪个索引处进行插入。这些方法的工作方式是在现有元素之后进行二分搜索,如果在集合中找不到该元素,它将返回与插入点相关的值。
    更多信息在这里Collections.binarySearch

    【讨论】:

    • 我猜你的意思是Arrays.binarySearch(),Collections.binarySearch 适用于列表,而不是数组
    • 虽然我认为他应该首先使用List,但插入更容易。
    猜你喜欢
    • 2015-08-13
    • 2021-11-05
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多