我好像碰了一下。我正在为minecraft 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;
}
答案 0 :(得分:3)
您正在使用未订购的HashMap。尝试使用List或任何其他有序数据结构 - 它将解决您的问题。
答案 1 :(得分:2)
您正在使用HashMap
,而不是保证元素的排序。
这是java.util.HashMap的API文档所说的内容:
此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。
您应该选择实现SortedMap
接口的具体类,该接口是 一个地图,它进一步提供其键的总排序 。
例如TreeMap
就足够了,因为它实现了SortedMap
接口。