在某个地方是否有相当于boost :: multi_index的Java?

时间:2010-06-18 14:45:00

标签: java boost multi-index

昨晚我偶然发现了一个百灵鸟的multi_index,同时对着我需要通过3个不同的键值访问的集合,以及重新平衡数组语义。好吧,我在boost::multi_index中得到了我的两个愿望之一(3个不同的键值)。

Java世界中是否存在类似的东西?

5 个答案:

答案 0 :(得分:2)

我刚刚用Java完成了MultiIndexContainer:http://code.google.com/p/multiindexcontainer/wiki/MainPage。 我知道它并不完全等同于boost multi_index_container,但它可能足以满足您的要求。

答案 1 :(得分:2)

重新提出旧问题,但请查看CQEngine作为解决方案。

有关背景信息,请参阅相关问题How do you query object collections in Java (Criteria/SQL-like)?

答案 2 :(得分:1)

我认为简短的答案是否定的,没有明显的等价物。

boost多索引类非常模糊,在Java中不易翻译。有仿制药,但它们完全没有相同之处。 (How are Java generics different from C++ templates? Why can't I use int as a parameter?)。

所以没有模板化,多索引类会是什么样的?

我想你会有你的数据类,例如Person,包含像Map实现的索引成员。此时,您有一个选择:

  1. 直接添加一些“索引” Person类(就像一些 Hashtables)和写查找 功能。管理索引 在Person中同步 类。
  2. 编写“IndexProvider”类 这使指数分离 功能完全来自人 - 它必须能够 动态创建不同的索引 类型,我想你会 通过处理同步 回调。
  3. 1)和2)的一些混合 - 像一个 索引的抽象基类 功能,但没有 正确解耦行为但是 确实提供了一些代码重用。
  4. 我认为,在大多数情况下1)是最容易编写,最容易维护的,并且可能是性能最高的。 2)似乎过度工程化。

    如果您有许多需要索引的数据结构,则另一个选项是将它们存储在数据库中。

答案 3 :(得分:-1)

我认为你可以在谷歌番石榴库中找到答案。可能 multimaps 可以解决您的需求。

https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained

在这些主题中评论:

答案 4 :(得分:-2)

我不知道boost :: multi_index是什么意思,但根据你提出的其他问题,我想你可能在谈论multi key map