2016-05-06 8 views
2

私はMinecraft Bukkit用のプラグインを作成しています。私は多くのHashMapsを使用しています。私は自分のデータを保存するために、プレイヤーのUUID(Stringとして)を使用していて、私が持っていることは、このようなものになります。Java |データ構造 - 文字列で別のオブジェクトを保存する

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

:次に

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

を使用します。また、のようなサブクラスを作成することができます。主にキーに基づいたルックアップを行う場合は、 'HashMap'sを使用してください。 – resueman

+1

@resuemanでも、鍵はすべてのハッシュマップで同じですから、何度も繰り返し使用しないでください。 –

答えて

2

Userオブジェクトを作成する必要があります。

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

private static Map<String, User> users; 
1

Playerクラスが必要です。各Playerインスタンスは、独自のデータを保持できます。また、uuidをキーとしてすべてのプレーヤーをハッシュマップに保つことができます。

public class Player { 
    private String uuid; 
    private int balance; 
    private String nickName; 

    //other fields 
} 
+0

いいえ、Playerクラスはすでに別のものです:) – Cukic0d

+0

次に別の名前を付けて – cyroxis

1

あなたは、専用のクラスの値を格納することもできます。

public class PlayerInfo { 
    private String userUUID; 
    private int balance; 
    // ... 
} 

Map<String, PlayerInfo> playerInfos = // ... 
1

使用しているフォームがかなりreleventです。あなたがデータと対話する方法に完全に依存し

private static Map<String, PlayerData> balances; 
関連する問題