gpt4 book ai didi

java - 如何使算法在Java中更有效地查找集合中的重复对象?

转载 作者:行者123 更新时间:2023-12-01 07:44:00 25 4
gpt4 key购买 nike

我声明了一个对象PersonDetails,它具有以下三个属性:

long id; 
String residence;

然后,我有一个包含所有填充的 PersonDetails 对象的 ArrayList:

List<PersonDetails> personDetailsList = new ArrayList<>();

我需要循环遍历此列表,通过匹配其 residence 属性来找出重复的 PersonDetails

Id  |   Residence
1 | a
2 | b
3 | a
4 | a
5 | b
6 | c
7 | c
8 | d

我为完成此任务而创建的代码/算法如下所示,并使用嵌套的for循环,这确实效率低下:

List<PersonDetails> personDetailsList = new ArrayList<>();
for (int i = 0; i <= personDetailsList.size() - 1; i++) {

long personId = personDetailsList.get(i)
.getId();
String personResidence = personDetailsList.get(i)
.getResidence();

for (int j = i + 1; j <= personDetailsList.size() - 1; j++) {
if (personResidence.equals(personDetailsList.get(j).getResidence())) {
count++;
}
}
}

有人可以建议一种更省时的方式来解决这个问题吗?我正在尝试想出一种更好的方法来优化它,但非常感谢第二双眼睛。对于较大的数据集来说,嵌套的 for 循环将是 hell 。

最佳答案

您可以通过 PersonDetails 进行一次迭代来完成此操作列表,记住您何时遇到 residence第一次使用Map<String, PersonDetails> :

List<PersonDetails> personDetails = new ArrayList<>();
personDetails.add(new PersonDetails(1, "a"));
personDetails.add(new PersonDetails(2, "b"));
personDetails.add(new PersonDetails(3, "a"));
personDetails.add(new PersonDetails(4, "a"));

Map<String, PersonDetails> encountered = new HashMap<>();
for (PersonDetails pd : personDetails) {
PersonDetails first = encountered.putIfAbsent(pd.residence, pd);
if (first != null) {
pd.isDuplicate = first.id;
first.isDuplicate = first.id; // mark the first encountered as duplicate
}
}

关于java - 如何使算法在Java中更有效地查找集合中的重复对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58658357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com