2009-01-23 20 views
17

我似乎在Google中使用了錯誤的搜索條件...在Java中使用泛型(域模型,而不是持久層)存在多對多集合嗎?

我已經爲多對多關聯編寫了泛型類,但我猜測這已經完成了。它很可能存在於比我自己更好的實現中。這是我第一次寫入泛型類。

爲了什麼,我尋找,我包括我自己的一些片段一個更好的主意:

我已經與2個包含HashMap支持它:

private final Map<T, List<S>> ssForTs = new HashMap<T, List<S>>(); 
private final Map<S, List<T>> tsForSs = new HashMap<S, List<T>>(); 

下面是實例:

new ManyToManyAssociations<Integer, Integer>(); 

一些可用的方法:

  • 公共無效addAssociation(T T,S S)
  • 公共無效removeAssociation(T T,S S)
  • 公共列表<Ť> getListOfTs()
  • 公共列表<小號> getListOfSs()
  • 公共列表<Ť> getTsForSs(S S)
  • 公共列表<小號> getSsForTs(T t)的

這些方法的名稱很差...我很抱歉。

基本用法是: 我可以很容易地找到T的所有S和相反。

您可以將鏈接發佈到已包含此功能的已打磨庫嗎?

+0

我已經寫了一些這些我自己。我不相信有一個通用的。 – 2009-01-23 17:53:43

回答

2

看起來像Apache Commons Multimap可能是有用的。

編輯:除了它是一對多,不是多對多。但是,它仍然可能會用到,而不是您的Map<T, List<S>>Map<S, List<T>>,或者作爲參考。

4

到目前爲止,這是一個比我想象的更簡單的問題。我從頭腦中知道的兩個Java集合擴展是duffymo提到的Google集合,以及Apache Commons Collections。也沒有一個多對多的地圖。用Google的術語來說,它應該是BiMultiMap;在Apache中,它將是一個BidiMultiMapMultiBidiMap