【问题标题】:Java | Data Structures - Storing different object by a String爪哇 |数据结构 - 通过字符串存储不同的对象
【发布时间】:2016-05-06 17:26:12
【问题描述】:

我正在为 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 无关,因此您无需对此有所了解。我要问的是,是否有更好的数据结构可以使用?我觉得我使用的 HashMap 太多了。

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

【问题讨论】:

  • 这完全取决于您如何与数据交互。如果您主要根据密钥进行查找,请坚持使用HashMaps。
  • @resueman 但问题是,每个哈希图的密钥都是相同的,所以我觉得我不应该一遍又一遍地使用它

标签: java data-structures hashmap storage


【解决方案1】:

听起来你应该创建一个用户对象。

class User {
    Integer balance;
    String nickname;
    List<Achievements> achievements;
    Rank rank;
}

private static Map<String, User> users;

【讨论】:

    【解决方案2】:

    您可能希望将值存储在专用类中:

    public class PlayerInfo {
        private String userUUID;
        private int balance;
        // ...
    }
    
    Map<String, PlayerInfo> playerInfos = // ...
    

    【讨论】:

      【解决方案3】:

      您使用的表格非常相关。您还可以创建一个子类,如:

      public class PlayerData {
          public int balance;
          public String nickname;
          ...
      }
      

      然后使用:

      private static Map<String, PlayerData> balances;
      

      【讨论】:

        【解决方案4】:

        你只需要一个Player 类。每个Player 实例都可以保留自己的数据。您可以使用 uuid 作为键将所有玩家保存在哈希映射中。

        public class Player {
             private String uuid;
             private int balance;
             private String nickName;
        
             //other fields
        }
        

        【讨论】:

        • 然后给它一个不同的名字
        猜你喜欢
        • 2011-09-24
        • 2017-04-10
        • 1970-01-01
        • 2022-12-03
        • 2020-02-21
        • 2011-01-07
        • 1970-01-01
        • 2015-02-08
        • 1970-01-01
        相关资源
        最近更新 更多