1

我似乎遇到了一个障碍。我正在为我的世界 bukkit 服务器创建一个“经济”系统。

我试图先按“最富有”来订购桌子,但是收到的订单是不同的。当我通过 phpMyAdmin 运行 SQL 时,它以正确的顺序接收

在此处输入图像描述

在此处输入图像描述

public static HashMap<String, Double> topPlayers(String economyKey) {
    sql.build("SELECT b.balance, p.username FROM " + sql.prefix
            + "players p INNER JOIN " + sql.prefix + "balances b ON p.id=b.user_id WHERE economy_key=? ORDER BY b.balance DESC LIMIT 0,5");
    String[] params = { economyKey };

    ResultSet results = sql.executePreparedQuery(params);
    HashMap<String, Double> players = new HashMap<String, Double>();
    try {
        while (results.next()) {
            players.put(results.getString("username"), results.getDouble("balance"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    return players;
}
4

2 回答 2

3

您正在使用未排序的 HashMap。尝试使用List或任何其他有序数据结构 - 它会解决您的问题。

于 2012-12-16T05:39:41.483 回答
2

您使用的HashMap是不保证元素顺序的。

这就是java.util.HashMap的 API 文档所说的:

此类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

您应该选择一个实现SortedMap接口的具体类,它是A Map ,它进一步提供了对其键的总排序

例如 aTreeMap就足够了,因为它实现了SortedMap接口。

于 2012-12-16T05:47:20.653 回答