11

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

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

4

5 回答 5

2

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

于 2011-03-22T21:12:52.153 回答
2

复活一个老问题,但看看CQEngine作为一个解决方案。

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

于 2013-05-20T09:47:15.877 回答
1

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

boost 多索引类的模板化程度很高,在 Java 中不容易翻译。有泛型,但它们根本不一样。(Java 泛型与 C++ 模板有何不同?为什么我不能使用 int 作为参数?)。

所以如果没有模板,多索引类会是什么样子?

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

  1. 将一些“索引”直接添加到 Person 类(如一些 Hashtables)并编写查找函数。在 Person 类中管理索引同步。
  2. 编写一个“IndexProvider”类,将索引功能完全与 Person 分离——它必须能够动态创建不同的索引类型,我想你会通过回调处理同步。
  3. 1) 和 2) 的一些混合 - 就像索引功能的抽象基类,它不能正确地解耦行为,但确实提供了一些代码重用。

我认为,在大多数情况下,1) 是最容易编写、最容易维护并且可能是性能最高的。2)似乎过度设计。

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

于 2010-09-04T16:04:11.813 回答
-1

我想你可以在 google guava library 中找到答案。可能多图可以解决您的需求。

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

正如这些线程中所评论的:

于 2015-01-22T11:20:43.333 回答
-2

我不知道 boost::multi_index 是什么意思,但是根据您的其余问题,我认为您可能在谈论多键映射

于 2010-06-18T14:50:12.850 回答