2016-08-04 19 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的ArrayList,其中每個TreeMap對應一個播放器。

回答

1

......怎麼

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

然後在其他地方,你可以有類型的球員的列表。

但我也同意PNS所說的,並且我已經閱讀了關於數據結構和POJO的內容。

+0

這是我認爲我應該去的方向。最好爲我的程序的各個部分創建類,而不是試圖製作一個令人困惑的鏈接集合 – ac927

2

通常,嵌套集合不是一個好主意。相反,使用具有其他集合的自定義對象集合。

就你而言,你應該有一個Player類,它有一個本壘打的Set或List,它也是一個自定義類。

class Player{ 
    List<HomeRun> homeRuns; 
} 

class HomeRun{ 
    String team; 
} 

現在你可以讓玩家實現Comparable<Player>並通過本壘打集合的大小命令他們,那麼你就可以存儲你的球員在一個TreeSet。

0

編程就是這樣。許多不同的解決方案,因此取決於您所需要的內容。如果您知道您不需要比您在問題中提供的信息更多的信息,則列表和地圖的解決方案應該沒問題。但是,也許考慮如果你需要某個時間來獲得每支球隊在本賽季創造的或者不得不補充的本壘打數量,那麼該怎麼辦。

我建議考慮一下數據庫設計,這可能不是你所需要的,但在製作可擴展設計方面有很多知識。

0

的一個很好的DS可以是:

HashMap<Player, HashMap<Team, Integer>> 

對於每一個球員,你可以在O得到(1)時間,另一個HashMap中,其專用話機可遍歷找到球隊本球員發揮和家庭 - 這支隊伍的運動量很大。

如果要按排序順序打印每位玩家的本壘打,還可以使用其他變體。另外,O(1)對你來說可能是一種矯枉過正。也許O(n)會對你有好處。您必須更具體地瞭解所需數據結構的用例。

+0

謝謝,但我認爲最好是爲我的程序的部分創建類 – ac927

+0

@ ac927:當然。在我的答案中,'Player'和'Team'只是你必須根據你的應用程序的需求來構建的類(http://stackoverflow.com/a/34071142/1835769)。 – displayName