有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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


共 (2) 个答案

  1. # 1 楼答案

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

    如果你还不知道,先去读一读。现在你知道了,K-D树不允许那种"Given name="John Doe",find the guy"类型的查询。相反,它允许的是"given this entire John Doe guy, find who is *closest* to him"

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

    如果处理的是少量数据,则不太可能看到这种数据结构的效果。有趣的是,当你搜索超过一个属性时,比如"given age=20 and name = "John", find the guy(s)",搜索速度会快得多

  2. # 2 楼答案

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

    如果你想在Java中创建一个具有多个可搜索选项的应用程序,并且你不太在乎空间,我会使用多个哈希表,每个哈希表对应一个不同的属性。让数组中的值成为指向某个人的指针https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

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