Datenstruktur

Status
Nicht offen für weitere Antworten.

Drake

Bekanntes Mitglied
Hallo

ich hab ein Problem damit wie ich bestimmte Daten verwalten soll.

Java:
public abstract class BasicGame {
    protected final int gameID;
    protected final LobbyState lobbyState;   //ein Enum
    ....
}

public class AGame extends BasicGame {
    private final LobbyStateAdditional1 lobbyStateAdditional1;   //ein weiterer Enum
    private final LobbyStateAdditional2 lobbyStateAdditional2;   //noch einer

    ...    
}

public class AnotherGame extends BasicGame {
    private final LobbyStateAdditional1 lobbyStateAdditional1;   //ein weiterer Enum
    private final LobbyStateAdditional2 lobbyStateAdditional2;   //noch einer

    ...
}

Das ganze findet am Server statt.

Meine Überlegung war diese in einer Map abzulegen
Java:
 Map<Integer, BasicGame>
bzw.
Java:
 Map<LobbyState, List<BasicGame>>


Aus diesen Daten bekommt ein Client in regelmäßigen Abständen eine Liste von Spielen entprechend seiner 'Position' in der Lobby, möchte er ein Spiel joinen soll es reichen wenn dieser nur die gameID schickt.

Irgendwie hackts bei mir gerade wie es am besten umsetzen kann.
 
Also, fassen wir zusammen:

Du hast mehrere Spiele, diese speichern je bis zu 5 LobbyStates. Zugriff auf ein Spiel soll möglich sein mit LobbyState und id.

Da hast du vier Möglichkeiten:

1) eine einfache Liste, die jedesmal komplett durchgegangen wird, wenn etwas gesucht wird.

2) wie 1), allerdings erleichterst du dir die Sache, indem du einen schöne Sortierung findest. Damit musst du nichtmehr alles durchsuchen.
Beispiel: Die Id eines Spiels sei ein String der Form [LS1].[LS2].[LS3].[RAND] (LS=LobbyState, der einfachheit halber nur drei, RAND ist eine Zufallszahl). Es gibt zwölf LobbyStates A, B, ..., L. Die LobbyStates werden alphabetisch sortiert um zu bestimmen, welcher LS1, welcher LS2 usw. ist. Die Spiele hätten dann Ids wie:

A.E.L.345
A.E.F.267
E.K.L.476
B.F.K.457

speicherst du die alphanumerisch sortiert findest du über binäry search sehr schnell das richtige Spiel. Und zwar mehr oder weniger unabhängig davon, ob du nach Ids oder nach LobbyStates suchst (Bedenke nur, dass ein LobbyState E an erster, zweiter und letzter Stelle stehen kann).

3) Eine Map mit Spielen pro LobbyState, eine mit Spielen pro ID, dass ist aber wahnsinnig speicherintensiv.

4) eine Map mit LobbyState pro ID, eine mit Spiel pro ID. Dann bei suchen nach LobbyState erst die ID aus der ersten Map und dann das Spiel aus der zweiten
 
danke für diesen Gedankengang, hast mir der Idee der IDs weitergeholfen. Muss noch zwar noch etwas weiter drüber nachdenken, aber hab schonmal neue Ansätze.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben