Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 导出对象之间的关系_Java_Algorithm_Performance - Fatal编程技术网

Java 导出对象之间的关系

Java 导出对象之间的关系,java,algorithm,performance,Java,Algorithm,Performance,嗨,我正试图设计一个算法,给定一组Person对象,如果有,给我它们之间的关系 例如: A人和B人: { "name":"abc", "address":"A main, B cross, C street, D state, E Country", "age": 30, "profession":"profession A" } { "name":"xyz", "address":"A main, B cross, C street, D state, E Country", "age":

嗨,我正试图设计一个算法,给定一组Person对象,如果有,给我它们之间的关系

例如:

A人和B人:

{ "name":"abc",
"address":"A main, B cross, C street, D state, E Country",
"age": 30,
"profession":"profession A"
}

{ "name":"xyz",
"address":"A main, B cross, C street, D state, E Country",
"age": 30,
"profession":"profession A"
}  
在这里我想说的是,两个人都有相同的属性,所以我的算法应该将他们识别为别名,我所遵循的方法是给一个新的person对象X,我正在尝试将这个人的属性与数据库中每个人的属性相匹配,这看起来非常缓慢,我如何改进它以提高效率

使用

现在,如果您可以找到任何冗余字段来唯一标识一个人,您可以跳过
hashCode()
equals()
中的字段。如果每个人的名字和地址都能被唯一地识别出来,你就不需要在这些方法中考虑<代码>年龄<代码>和<代码>专业>代码>,从而导致更快的哈希。 希望有帮助

使用

现在,如果您可以找到任何冗余字段来唯一标识一个人,您可以跳过
hashCode()
equals()
中的字段。如果每个人的名字和地址都能被唯一地识别出来,你就不需要在这些方法中考虑<代码>年龄<代码>和<代码>专业>代码>,从而导致更快的哈希。

希望有帮助

我建议为Person类编写一个比较器,从您的集合中列出列表并对列表进行排序。然后,您可以在一个过程中完成这项工作—只需比较当前元素和下一个元素。Comparator会根据人的属性对人进行比较,因此所有别名在排序的列表中都会相处融洽。

我建议为Person类编写一个Comparator,从集合中创建列表并对列表进行排序。然后,您可以在一个过程中完成这项工作—只需比较当前元素和下一个元素。比较者将根据人的属性进行比较,因此,所有别名在已排序列表中都会相互协调。

将person的每个属性分配到数据库表中的特定列中,并在这些列上创建索引可能运行得很快,并且可以完成此任务。

将person的每个属性分配到数据库表中的特定列中,并在这些列上创建索引可能运行得很快工作也做得很好。

让我们看看你做了哪些尝试,也许有一个明显的问题,你所说的“他们之间的关系”是什么意思?你只是想找到别名,甚至是部分匹配吗?目前使用精确匹配@JánHalašaQuestions请求一个非现场框架或库是离题的=[ sorry@nhouser9我只是在寻找一种算法,这种算法在这方面是有效的,而不是做一个完整的表扫描,我已经删除了框架部分告诉我们你已经尝试了什么,也许有一个明显的问题你所说的“它们之间的关系”是什么意思?你只是想找到别名,甚至是部分匹配吗?目前,要求提供非现场框架或库的确切匹配@JánHalašaQuestions都是离题的=[ sorry@nhouser9我只是在寻找一种算法,这种算法在这方面是有效的,而不是做一个完整的表扫描,我已经删除了框架部分这将是有效的当数据集很小,如果我有数以百万计的记录呢?这种方法会行得通吗?@kumarD check update。实际上,我在寻找t他和你说的方法一样about@kumarD检查更新当数据集很小时,这将是有效的,如果我有数百万条记录呢?此方法有效吗?@kumarD check update。实际上,我正在寻找你所说的equals方法的有效实现about@kumarD检查更新
Map<Person, List<Person>> personMap = new HashMap<>();
@Override
public boolean equals(Object other) {

    if (other == this) return true;
    if (!(other instanceof Person)) {
        return false;
    }

    Person person = (Person) other;

    return person.getName().equals(this.getName()) &&
            person.getAddr().equals(this.getAddr()) &&
            person.getAge() = this.getAge() &&
            person.getProfession().equals(this.getProfession());
}

//Idea from effective Java : Item 9
@Override
public int hashCode() {
    int hash = 17;
    hash = 31 * hash + this.getName().hashCode();
    hash = 31 * hash + this.getAddr().hashCode();
    hash = 31 * hash + this.getAge();
    hash = 31 * hash + this.getProfession().hashCode();
    return hash;
}