2016-05-06 9 views
2

Ich schreibe ein Plugin für Minecraft Bukkit, und ich finde, dass ich eine Menge HashMaps benutze. Ich verwende Spieler UUID (als String) ihre Daten zu speichern, und was ich in etwa so aussehen:Java | Datenstrukturen - Speichern von verschiedenen Objekten durch einen String

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>(); 
} 

Keine Sorge, die Frage, die ich gefragt bin, hat nichts mit Minecraft Bukkit zu tun, also brauchst du nichts darüber zu wissen. Ich frage, ob es eine bessere Datenstruktur gibt, die ich verwenden kann? Ich habe das Gefühl, dass ich zu viele HashMaps verwende.

Kennt jemand eine bessere Alternative? Danke im Voraus!

+0

, die ganz davon ab, wie Sie mit den Daten interagieren. Wenn Sie hauptsächlich nach dem Schlüssel suchen, dann bleiben Sie bei HashMap's. – resueman

+1

@resueman aber die Sache ist, der Schlüssel ist das gleiche für jeden hashmap, so dass ich fühle, wie ich es nicht immer wieder verwenden sollte –

Antwort

2

Es klingt wie Sie ein Benutzerobjekt erstellen sollten.

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

private static Map<String, User> users; 
1

Sie brauchen nur eine Player Klasse. Jede Instanz kann ihre eigenen Daten behalten. Und Sie können alle Spieler in einer Hash-Karte mit UUID als Schlüssel halten.

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

    //other fields 
} 
+0

Nein, Player-Klasse ist schon etwas anderes :) – Cukic0d

+0

Dann geben Sie einen anderen Namen – cyroxis

1

Sie können die Werte in einer eigenen Klasse speichern wollen:

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

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

Das Formular Sie verwenden ganz relevent ist.

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

Dann nutzen: Sie können auch eine Unterklasse wie schaffen

private static Map<String, PlayerData> balances;