簡體   English   中英

確定要使用的Java集合的類型

[英]Determining type of Java collections to use

這是我的問題:

考慮一下我有很多棒球信息。 此列表中的每個條目都是一個玩家擊中的本壘打,由他的名字和他在擊中本壘打時所在的球隊記錄。 它看起來像:

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

我試圖理解如何將這些數據存儲在一個表格中,每個玩家都有一個Key:Value對列表,其中K =(團隊名稱),V =(在為該團隊比賽時擊中本壘打的數量)。 這組key:值應按homeruns排序。

這只是我想解決問題的方式,但我真的不知道這是否是最好的方法。 最終目標是能夠吐出另一個表單列表:

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

我該如何創建這樣的數據結構?

到目前為止,我的主要想法是:TreeMaps的ArrayList,其中每個TreeMap對應一個Player。

通常,擁有嵌套集合並不是一個好主意。 而是使用具有另一個集合的自定義對象的集合。

在你的情況下,你應該有一個Player類,它有一個本壘打的Set或List,也可以是一個自定義類。

class Player{
    List<HomeRun> homeRuns;
}

class HomeRun{
    String team;
}

現在你可以讓Player實現Comparable<Player>並按homeRuns集合的大小排序,然后你可以將你的玩家存儲在TreeSet中。

怎么樣...

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

然后在其他地方,你可以有一個Player類型的列表。

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

這就是編程的方式。 許多不同的解決方案因此取決於您所說的需求。 如果您知道您不需要的信息超出了您在問題中提供的信息,那么列表和地圖的解決方案應該沒問題。 但是,也許考慮一下如果你需要獲得每支球隊曾經得過的本壘打的數量或者必須在哪個賽季中加入本壘打的話。

我建議研究數據庫設計,這可能不是你需要的,但是有很多關於進行可擴展設計的知識。

一個好的DS可以是:

HashMap<Player, HashMap<Team, Integer>>

對於每個玩家,您可以在O(1)時間內獲得另一個HashMap,其密鑰集可以被迭代以找到該玩家所玩的團隊以及該團隊的本壘打。

如果您希望按排序順序打印每個玩家的本壘打,則可以使用其他變體。 此外,O(1)可能對你來說太過分了。 也許O(n)會對你有好處。 您必須更加具體地了解所需數據結構的用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM