2016-08-04 6 views
1

ここに私の問題があります:使用するJavaコレクションのタイプを決定する

野球情報の大きなリストがあるとします。このリストの各項目は、プレーヤーがヒットしたホームランであり、彼の名前と彼がホームランに当たったときのチームによって記録されています。私は、各プレイヤーがキーのリストがある形でこのデータを保存する方法を理解することが

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

私がしようとしています: それはのようになります。値のペア、K =(チーム名)、V = (そのチームでプレーしているホームランの数)。この一連のキー:値は、ホームランの数で並べ替える必要があります。

これは私が問題を解決するために考えている方法ですが、これを行うにはこれが最善の方法であるかどうか本当に分かりません。最終的な目標は、フォームの別のリストを吐き出すことです。

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

このようなデータ構造を作成するにはどうすればよいですか?

これまでの主な考え方は次のとおりです。各TreeMapがPlayerに対応するTreeMapのArrayList。

答えて

1

どう

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

そして他の場所で...について、あなたはタイプのプレーヤーのリストを持つことができます。

しかし、私はPNSの言うことに同意し、データ構造とPOJOを読み上げました。

+0

これは私が行くべきだと思う方向です。私のプログラムのさまざまな部分のクラスを作成することが、リンクされたコレクションの1つの大きな混乱を招くことなく – ac927

2

通常、ネストされたコレクションを持つことはお勧めできません。代わりに、別のコレクションを持つカスタムオブジェクトのコレクションを使用します。

あなたの場合、カスタムクラスでもあるホームランのセットまたはリストを持つPlayerクラスが必要です。

class Player{ 
    List<HomeRun> homeRuns; 
} 

class HomeRun{ 
    String team; 
} 

今、あなたは、プレイヤーがComparable<Player>を実装して、あなたがTreeSetの中で、あなたのプレーヤーを格納することができ、ホームランコレクションのサイズで注文して作ることができます。

0

これはプログラミングの仕組みです。多くの異なるソリューションは、あなたが言うように必要なものに依存します。あなたがあなたの質問に提示する情報以上のものを必要としないことが分かっているなら、あなたのリストと地図を持つ解決策はうまくいくはずです。しかし、ある時点でホームチームの得点を獲得する必要がある場合は、チームがこれまでに得点を決めていたか、ホーマーが作成されたシーズンに追加しなければならない場合は、おそらく何をすべきか考えてください。

私はデータベース設計を検討することを提案しますが、これはおそらくあなたが必要とするものではありませんが、拡張可能な設計の知識が豊富です。このため

0

良いDSをすることができ:あなたはO(1)時間で取得することができ、各プレーヤーのための

HashMap<Player, HashMap<Team, Integer>> 

、そのキーセットこのプレーヤーはのために遊んだチームと家を見つけるために繰り返し処理することができ、別のHashMapそのチームのためにヒットしました。

プレイヤーごとにソート順でホームランを印刷したい場合は、他のバリエーションを使用することができます。また、O(1)はあなたにとって過度のものかもしれません。 O(n)はあなたにとって良いかもしれません。あなたは、必要なデータ構造のユースケースをより具体的にする必要があります。

+0

ありがとうございますが、私のプログラムの部分のクラスを作成するのが最善であると思います。 – ac927

+0

@ ac927:もちろんです。私の答えの中の「Player」と「Team」は、あなたのアプリケーションのニーズに従って構築しなければならないクラスです(http://stackoverflow.com/a/34071142/1835769)。 – displayName

関連する問題