【问题标题】:Is there an equivalent of boost::multi_index for Java someplace?Java 的某个地方是否有等效于 boost::multi_index 的东西?
【发布时间】:2010-06-18 14:44:59
【问题描述】:

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

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

【问题讨论】:

  • 可能有点矫枉过正(因此发表评论),您是否考虑过为此使用嵌入式数据库?您可以在内存中嵌入和运行许多轻量级数据库,我想这取决于您的性能要求......

标签: java boost multi-index


【解决方案1】:

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

【讨论】:

  • 界面看起来不错,实际上解决了多索引要求。
  • 哇,这么久了,也许是时候复活我的旧项目了:-) 顺便说一句,我已经将它导出到 github github.com/Kamosh/multiindexcontainer,但很难说它是什么形状。
【解决方案2】:

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

背景见相关问题How do you query object collections in Java (Criteria/SQL-like)?

【讨论】:

    【解决方案3】:

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

    boost 多索引类的模板化程度很高,在 Java 中不容易翻译。有泛型,但它们根本不一样。 (How are Java generics different from C++ templates? Why can't I use int as a parameter?)。

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

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

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

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

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

    【讨论】:

    • 我发布了关于谷歌番石榴的新答案。这可能是一个解决方案
    【解决方案4】:

    我认为您可以在 google guava 库中找到答案。可能多地图可以解决您的需求。

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

    正如这些帖子中所评论的:

    【讨论】:

    • multi_index 表示您可以将一个包含多个键的值放入其中,并按每个键进行分组。想象一下类似文件的映射,一次按名称键入,一次按扩展名键入等等。
    【解决方案5】:

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

    【讨论】:

    • 不,抱歉。这是一个弱类型的复合键容器的例子。 boost::multi_index 是强类型的,但更重要的是它有多个独立的键。 IE。在人员的 multi_index_container 中,您可以按姓名、SSN 或出生日期查找人员。 (显然名称和 DOB 不会是唯一键)
    猜你喜欢
    • 2014-05-28
    • 2010-09-09
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 2022-12-22
    • 2011-01-07
    相关资源
    最近更新 更多