我想用SQL排行榜。
因此,在我的情况下,我必须与kills
一起订购才能对结果进行排序。
但是在结果集的情况下,顺序是错误的。
HashMap<String, Integer> player_list = new HashMap<>();
preparedStatement = this.pvpBox.getDtb().getConnection().prepareStatement(
"SELECT player_name, kills FROM players ORDER BY kills DESC LIMIT 10");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
player_list.put(resultSet.getString("player_name"), resultSet.getInt("kills"));
}
没有错误消息。
我已经在PHPMyAdmin的“ SQL”部分中尝试过,并且得到了预期的结果。
表格示例:
player_name kills player1 40 player2 20 player3 50 player4 10 player5 30
实际结果:
player_name kills player5 30 player1 40 player4 10 player2 20 player3 50
预期结果:
player_name kills player3 50 player1 40 player5 30 player2 20 player4 10
我正在使用Java 8和Apache 2。
解决方案:使用LinkedHashMap而不是HashMap(哈希映射没有任何顺序)。
答案 0 :(得分:3)
您正在使用的resizeMode : 'contain'
显然不是player_list
。使用List
方法和两个参数,它看起来像put()
。
如果您使用的是Map
,难怪该顺序是任意的-HashMap
不会保留任何顺序。
您可能希望使用HashMap
或其他数据结构,例如自定义对象,然后将其实际存储在列表中,而不是在地图中。
答案 1 :(得分:1)
player_list是哈希表对象吗? Hashmap不会保持插入值的顺序。请尝试使用LinkedHashMap或TreeMap。
答案 2 :(得分:0)
我认为问题出在player_list,这是未排序的地图实现。如果要保留地图中插入的顺序,请使用LinkedHashMap。