2016-08-04 5 views
1

Hier ist mein Problem:Bestimmen der Art der Java-Sammlungen zu verwenden

Bedenken Sie, dass ich eine große Liste von Baseball-Informationen haben. Jeder Eintrag in dieser Liste ist eine Homerun, die ein Spieler getroffen hat, aufgezeichnet von seinem Namen und dem Team, in dem er war, als er den Homerun getroffen hat. Es wäre in etwa so aussehen:

Player |  Team 
tim    eagles 
john   bears 
frank   lions 
tim    lions 
frank   bears 
john   lions 
john   bears 
tim    eagles 
tim    eagles 
frank   eagles 

ich zu verstehen versuchen, wie ich diese Daten in einer Form gespeichert werden würde, wo jeder Spieler eine Liste von Key hat: Wert-Paare, wobei K = (Teamnamen), V = (Anzahl der Homeruns, die während des Spiels für dieses Team getroffen wurden). Dieser Schlüsselsatz: Werte sollten nach Anzahl der Homeruns sortiert werden.

Dies ist nur die Art, wie ich das Problem zu lösen denke, aber ich habe wirklich keine Ahnung, ob dies der beste Weg ist, es zu tun. Das Endziel ist es, eine weitere Liste der Form auszuspucken:

Player | Team | Homeruns 
tim   eagles   3 
john  bears   2 
frank  lions   1 
frank  eagles   1 
john  lions   1 
tim   lions   1 
frank  bears   1 

Wie könnte ich mich über eine solche Datenstruktur zu schaffen?

Meine bisherige Hauptidee ist: ArrayList von TreeMaps, wobei jede TreeMap einem Player entspricht.

Antwort

1

Wie wäre es ...

class Player{ 
    Map<String, Integer> homeRuns; 
} 

Und dann an anderer Stelle Sie eine Liste der Typ Spieler haben könnte.

Aber ich stimme auch mit dem überein, was PNS sagte, und ich würde über Datenstrukturen und POJOs nachlesen.

+0

das ist die Richtung, die ich denke, ich sollte gehen. Es wird am besten sein, Klassen für die verschiedenen Teile meines Programms zu erstellen, anstatt zu versuchen, einen großen verwirrenden Satz verknüpfter Sammlungen zu erstellen – ac927

2

Normalerweise ist es keine gute Idee, verschachtelte Sammlungen zu haben. Verwenden Sie stattdessen Auflistungen von benutzerdefinierten Objekten, die eine andere Auflistung haben.

In Ihrem Fall sollten Sie eine Player-Klasse mit einem Set oder einer Liste von Homeruns haben, was auch eine benutzerdefinierte Klasse wäre.

class Player{ 
    List<HomeRun> homeRuns; 
} 

class HomeRun{ 
    String team; 
} 

Nun könnte man Spieler Comparable<Player> machen umzusetzen und durch die Größe der Homeruns Sammlung bestellen, dann können Sie Ihre Spieler speichern in einem TreeSet.

0

So programmieren Sie. Viele verschiedene Lösungen, so kommt es darauf an, was Sie brauchen, wie Sie sagen. Wenn Sie wissen, dass Sie nicht mehr als die Informationen benötigen, die Sie in Ihrer Frage angeben, sollte Ihre Lösung mit Liste und Karte in Ordnung sein. Vielleicht überlegen Sie aber, was zu tun ist, wenn Sie irgendwann die Anzahl der Homeruns, die jedes Team je erzielt hat oder in welcher Jahreszeit die Homerun gemacht wurde, berechnen müssen.

Ich schlage vor, in das Datenbankdesign zu schauen, das vielleicht nicht das ist, was Sie für dieses benötigen, aber hat viel Wissen auf, erweiterbares Design zu machen.

0

Gut DS hierfür kann sein:

HashMap<Player, HashMap<Team, Integer>> 

Für jeden Spieler, den Sie in O (1) Zeit bekommen, eine andere HashMap dessen Keyset iteriert werden kann Team zu diesem Spieler für und das Haus gespielt zu finden - Treffer für dieses Team.

Wenn Sie die Home-Runs pro Player in einer sortierten Reihenfolge drucken möchten, gibt es weitere Variationen, die verwendet werden können. Außerdem kann O (1) ein Overkill für Sie sein. Vielleicht wäre O (n) gut für dich. Sie müssen genauer auf Ihren Anwendungsfall für die erforderliche Datenstruktur eingehen.

+0

danke, aber ich denke, es wird am besten sein, Klassen für die Teile meines Programms zu erstellen – ac927

+0

@ ac927: Natürlich. 'Player' und' Team' in meiner Antwort sind nur Klassen, die Sie [gemäß den Anforderungen Ihrer Anwendung] erstellen müssen (http://stackoverflow.com/a/34071142/1835769). – displayName

Verwandte Themen