当前位置: 首页 > 面试题库 >

Java集合的多个索引-最基本的解决方案?

仰成天
2023-03-14
问题内容

我正在寻找在Java集合上创建多个索引的最基本的解决方案。

所需功能:

  • 删除值时,必须删除与该值关联的所有索引条目。
  • 索引查找必须比线性搜索更快(至少与TreeMap一样快)。

附带条件:

  • 不依赖大型(如Lucene)库。没有不常见或未经良好测试的库。没有数据库。
  • 像Apache Commons Collections等之类的库就可以了。
  • 如果它仅与JavaSE(6.0)一起工作,那就更好。
  • 编辑: 没有自我实现的解决方案(感谢给出答案的答案-出于完整性考虑,在这里很好,但是我已经有一个与杰伊的解决方案非常相似的解决方案) 每当几个人发现他们实现了同一件事时,应该成为一些公共图书馆的一部分。

当然,我可以编写一个自己管理多个Maps的类 (这并不难,但感觉就像是在重新发明轮子) 。因此,我想知道,是否可以不这样做-
同时仍然获得与使用单个索引的java.util.Map类似的简单用法。

谢谢克里斯

更新资料

看起来好像我们什么都没有找到。我喜欢您的所有答案-自行开发的版本,指向类似于数据库的库的链接。

这就是我真正想要的:在(a)Apache Commons Collections或(b)Google Collections /
Guava中具有此功能。也许是一个很好的选择。

其他人还会错过这些库中的此功能吗?它们确实提供了诸如MultiMaps,MulitKeyMaps,BidiMaps之类的各种东西,…我觉得,它很适合这些库-
可以称为MultiIndexMap。你怎么看?


问题答案:

每个索引基本上都是一个单独的索引Map。您可以(可能应该)在一个为您管理搜索,索引编制,更新和删除的类后面抽象它。相当普遍地做到这一点并不难。但是,没有,尽管可以很容易地从Java
Collections类中构建,但没有标准的现成类。



 类似资料:
  • 问题内容: 我有一套清单: 我要s1∩s2∩s3 … 我可以编写一个函数来执行一系列成对的操作,等等。 有没有推荐,更好或内置的方法? 问题答案: 从python版本2.6开始,您可以对使用多个参数,例如 如果这些集合在列表中,则表示为: 这里是列表扩展 请注意,是 不是 一个静态的方法,但这种使用功能符号应用第一套交叉口列表的其余部分。因此,如果参数列表为空,则将失败。

  • 我的集合中有两个数组(一个是嵌入式文档,另一个只是字符串的简单集合)。文档,例如: 由于一些查询将仅包含策略,而一些查询将包含标签和参与者数组,并且考虑到我无法创建具有两个数组的多键索引这一事实,我认为使用索引交叉点将是一个经典场景。 我正在执行一个查询,但我看不到交叉点。 以下是索引: 以下是查询: 这是解释的结果: 查询中的每个标记(tag1、tag-2和tag-3)都有10K个文档。每个策略

  • 问题内容: 这两种流创建方法之间在性能或最佳实践方面是否存在显着差异? 编辑 多亏了Stack Community的回答,我可以为新读者添加一些问题的完整性补充: 许多人指出,IntStream方法定义为: 从根本上将问题重新定义为下列哪个更好的问题: 要么 问题答案: 是的,可以从缓存中检索某些实例的用法。 因此,您应该将该版本与(最好使用)一起使用,或者使用代替。请注意,实际上这是的简写。

  • 谷歌云平台通过Anthos这个开放的应用现代化平台,实现了混合云计算和多云计算。Antos如何为分布式数据平台工作? 例如,我在Teradata On-premise、AWS Redshift和Azure Snowflake中有我的数据。Antos可以连接所有数据集并允许用户以低延迟查询或执行报告吗?AWS和Azure中的GCP Anthos的等价物是什么?

  • 问题内容: Java中最快的集合是什么? 我只需要添加和删除操作,顺序并不重要,等于元素不是问题,无非就是添加和删除。 没有限制的大小也很重要。 这些集合中将包含对象。 当前,我正在使用ArrayDeque,因为我看到这是更快的Queue实现。 问题答案: 是最好的。请参阅此基准测试,该基准测试来自博客文章,涉及基准测试的结果。没有节点分配的开销,也没有转移删除的剩余数组内容的开销。在基准测试中,

  • 假设我有多个要作为单个流处理的集合。最简单的方法是什么?是否有一个实用程序类可以为我做这件事,或者我必须自己滚动一些东西? 如果我的问题不清楚,这基本上就是我想做的: