与其说这是一个编码问题,不如说是一个逻辑问题。 我的任务是根据三个下拉列表中的选择显示文档列表,每个文档属性一个。 属性包括客户端、文档类型和文档类别。 由于所有三个视图的默认视图均为"全部",因此我最初将从数据库中获取所有文档。
我想将该列表存储在本地数据结构中,以便每次用户根据下拉列表选择筛选结果时,我都可以快速提取结果并显示它们。 由于实际上可能有成千上万的客户端和文档类别,因此我觉得三维数组会变得太麻烦了。 关于如何最好地实现这一目标的任何想法?
谢谢!
一种选择是使用嵌入式(内存中)数据库,例如H2,HSQLDB或SQLite - 这样数据库负责索引,并且因为它是内存数据库,所以没有重复访问磁盘的成本。
第二种选择是为每个属性维护一个Map<key, Set<data>>
,然后取三个检索集合(mapA.get("A").intersection(mapB.get("B").intersection(mapC.get("C")))
)的集合交集,这将在大约O(n)
时间内运行,其中n
是三个检索集合的总大小。
最后,还有可用于执行范围搜索的多维索引数据结构,例如 k-d 树。 它们不包含在大多数标准语言库中,但有几种语言可以通过 github 或任何地方获得开源实现。
如果只有三个属性被索引,我更喜欢使用Map<key, Set<data>>
,如果有超过六个或七个属性被索引,则使用嵌入式数据库或 k-d 树。