Java中是否有使用泛型(域模型,而不是持久化层)的多对多集合?

2022-09-02 14:04:51

我似乎在谷歌中使用了错误的搜索词......

我已经为多对多关联编写了一个通用类,但我猜这已经完成了。它很可能存在于比我自己的实现更好的实现中。这是我第一次尝试编写通用类。

为了更好地了解我正在寻找的内容,我包含了一些我自己的片段:

我用2个哈希图支持它:

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>();

一些可用的方法:

  • public void addAssociation(T t, S s)
  • 公共 void removeAssociation(T t, S s)
  • public List<T> getListOfTs()
  • public List<S> getListOfSs()
  • 公共列表<T> getTsForSs(s)
  • public List<S> getSsForTs(T t)

这些方法的名称很差...我很抱歉。

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

您能否将链接发布到已包含此功能的精美库?


答案 1

到目前为止,这是一个比我想象的不那么微不足道的问题。我所知道的两个Java Collections扩展是duffymo提到的Google扩展和Apache Commons Collections。两者都没有多对多的地图。在谷歌的术语中,它将是一个;在 Apache 中,它将是 or .BiMultiMapBidiMultiMapMultiBidiMap


答案 2

看起来Apache Commons Multimap可能很有用。

编辑:除了它是一对多,而不是多对多。但是,使用它来代替您的 和 或 作为参考可能仍然很方便。Map<T, List<S>>Map<S, List<T>>


推荐