我正在为Minecraft Bukkit编写一个插件,我发现我使用了很多HashMaps。我使用播放器的UUID(作为字符串)来存储他们的数据,我看起来像这样:
private static Map<String, Integer> balances;
private static Map<String, String> nicknames;
private static Map<String, List<Achievements>> achievements;
private static Map<String, Rank> ranks;
@Override
public void onEnable() {
balances = new HashMap<String, Integer>();
nicknames = new HashMap<String, String>();
achievements = new HashMap<String, List<Achievement>>();
ranks = new HashMap<String, Rank>();
}
别担心,我提出的问题与Minecraft Bukkit无关,因此您无需了解任何相关信息。我要问的是,我是否可以使用更好的数据结构?我觉得我使用的HashMaps太多了。
有谁知道更好的选择吗?提前谢谢!
答案 0 :(得分:2)
听起来你应该创建一个User对象。
class User {
Integer balance;
String nickname;
List<Achievements> achievements;
Rank rank;
}
private static Map<String, User> users;
答案 1 :(得分:1)
你只需要一个Player
课程。每个Player
实例都可以保留自己的数据。并且您可以使用uuid作为密钥将所有玩家保留在哈希映射中。
public class Player {
private String uuid;
private int balance;
private String nickName;
//other fields
}
答案 2 :(得分:1)
您可能希望将值存储在专用类中:
public class PlayerInfo {
private String userUUID;
private int balance;
// ...
}
Map<String, PlayerInfo> playerInfos = // ...
答案 3 :(得分:1)
您使用的表格非常相关。您还可以创建一个子类,如:
private static Map<String, PlayerData> balances;
然后使用:
class Player < ActiveRecord::Base
has_many :game_players
has_many :games, through: :game_players
end
class Game < ActiveRecord::Base
has_many :game_players
has_many :players, through: :game_players
end
class GamePlayer < ActiveRecord::Base
belongs_to :game
belongs_to :player
def starting_player
return GamePlayer.joins(:game).merge(GamePlayer.starting).first.player
end
end