java - 如果我想根据不同的属性以不同的方式搜索一个对象,应该使用什么数据结构?

标签 java object data-structures

我正在用java编程,但这只是一个细节。 我有这个对象 person 类,其属性如下:姓名、年龄、体重...并且我需要将人员存储在我的应用程序中并能够搜索他们。现在,我可以按姓名、年龄、体重……所有该人的属性来搜索他们。允许我有效地完成此操作的最佳数据结构/实现是什么?

最佳答案

K-D tree是一个不错的选择。它对多维数据(具有多个属性的任何对象)进行分区,并实现像 O(logN) 搜索复杂度一样的二叉搜索树。然而,这将需要对主要变体进行少量修改。

如果您还不了解,请先阅读相关内容。现在您知道了,K-D 树并不完全允许 ​​“Given name="John Doe",find the Guy” 类型的查询。相反,它允许的是“给定整个 John Doe 家伙,找到谁是离他*最近的*”

在树的每一层,它根据该层相应的维度选择左子树或右子树。但对于第一种查询,除一个维度之外的所有维度的数据均为空。因此,为了进行搜索,您无论如何都要创建一个输入对象,其中包含除该一维之外的所有维度的特殊虚拟数据。在你的搜索功能中,当你遇到那些特殊数据时,你就对两个子树进行搜索。与 K-D 树不同,您可以检查精确匹配,而不是接近度。

如果您处理少量数据,您不太可能看到此数据结构的效果。但有趣的是,当您搜索超过 1 个属性时,例如“给定年龄 = 20 且姓名=“约翰”,找到那个人”,搜索速度会快得多。

关于java - 如果我想根据不同的属性以不同的方式搜索一个对象,应该使用什么数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47268638/

相关文章:

java - Android - 我将如何动态更改 clickListener

java - 使用 Tomcat 和 Eclipse 的远程开发工作流

javascript - 我想根据属性键值对从对象返回的项目进行排序,然后为界面中的每个项目分配排名(1,2,3...等)

c - 在 C 中处理大数据集

c - 更多 C 指针问题

java - Spring Batch - 自定义项目编写器未写入文件

c# - 跨平台、稳定、功能强大的网络平台

data-structures - 可从任何地方读取的类似队列的数据结构

javascript - 使用函数作为对象属性

javascript - 根据嵌套对象数组的深度生成节点号