Java |数据结构 - 通过字符串存储不同的对象

时间:2016-05-06 17:26:13

标签: java data-structures hashmap storage

我正在为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太多了。

有谁知道更好的选择吗?提前谢谢!

4 个答案:

答案 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