Java 如果要根据不同的属性以不同的方式搜索对象,应该使用什么数据结构?

Java 如果要根据不同的属性以不同的方式搜索对象,应该使用什么数据结构?,java,object,data-structures,Java,Object,Data Structures,我用java编程,但这只是一个细节。 我有一个object person类,其属性如下:姓名、年龄、体重。。。我需要在我的应用程序中存储人员并能够搜索他们。现在,我可以按姓名、年龄、体重搜索它们。。。那人的所有特征。什么样的数据结构/实现可以让我高效地完成这项工作?您的最终目标是什么?如果您只是想看到不同人群之间的趋势,我建议您只使用R或Python。这样,您可以快速查找、比较和可视化基于不同属性的组/个人 如果您想在Java中创建一个具有多个可搜索选项的应用程序,并且不太关心空间,我会使用多个

我用java编程,但这只是一个细节。
我有一个object person类,其属性如下:姓名、年龄、体重。。。我需要在我的应用程序中存储人员并能够搜索他们。现在,我可以按姓名、年龄、体重搜索它们。。。那人的所有特征。什么样的数据结构/实现可以让我高效地完成这项工作?

您的最终目标是什么?如果您只是想看到不同人群之间的趋势,我建议您只使用R或Python。这样,您可以快速查找、比较和可视化基于不同属性的组/个人

如果您想在Java中创建一个具有多个可搜索选项的应用程序,并且不太关心空间,我会使用多个哈希表,每个哈希表对应一个不同的属性。让数组中的值成为指向某个人的指针

K是你的属性(年龄、性别等),V是指向人的指针

是一个很好的选择。它对多维数据(具有多个属性的任何对象)进行分区,并支持类似于O(logN)搜索复杂性的二叉搜索树。然而,这将需要对主要变体进行少量修改

如果你还不知道,先去读一读。所以现在你知道了,K-D树并不完全允许那种
“Given name=“John Doe”,find the guy“
类型的查询。相反,它允许的是
“考虑到这个约翰·多伊的家伙,找出他*最近*的人”

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


如果处理的是少量数据,则不太可能看到此数据结构的效果。有趣的是,当您搜索多个属性时,如
“给定年龄=20和name=“John”,找到那个家伙”
,搜索速度会快得多。

SQL和内存数据库。