gpt4 book ai didi

java - 这是java中更新列表中对象(如果存在)最快、最有效的实现,否则添加它

转载 作者:行者123 更新时间:2023-12-01 08:15:05 28 4
gpt4 key购买 nike

我有一个正在工作的问题陈述,但我仍然想知道更高效、更快,更重要的是正确设计来处理下面提到的场景。

我有一个 POJO 类

class A {
String s;
Double d;
}

我正在尝试填充一个列表,基本上是对象 A 的列表到列表中。现在有问题的实现。在将对象 A 添加到列表中时,我需要检查带有 String 的对象是否已经存在。如果是,我想用旧 d1 + 新 d1 更新旧对象,并且不将新对象添加到列表中,如果否,则将新对象添加到列表中。我目前的实现如下所示。

double dd = 0.0;
List<A> aList = new List<A>();
List<A> aListToRemove = new List<A>();
A newA = null;
for(int i=0;i<=100;i++ ){
newA = method call which returns newA;
for(A oldA: aList ){
if(oldA.getS().equals(newA.getS())){
dd = oldA.getD() + newA.getD();
newA.setD(dd);
aListToRemove.add(oldA);
}
aList.add(newA);
aList.removeAll(aListToRemove);
}
}

//at the end, i would like to see aList with no duplicates, but with updated d value.

是否有更有效的方法在第二个 for 循环中进行处理?

最佳答案

看来您可以为您的用例使用 map :

Map<String, A> map = new HashMap<> ();

并将项目放入 map 中,如下所示:

map.put(someA.s, someA);

这应该将您的 O(n^2) 算法变成 O(n) 算法。

当您收到newA时,您可以使用以下内容:

A a = map.get(newA.getS());
if (a == null) {
map.put(newA.getS(), newA); //new string => new item in the map
} else {
a.setD(a.getD() + newA.getD()); //found string => updating the existing item
}

关于java - 这是java中更新列表中对象(如果存在)最快、最有效的实现,否则添加它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137746/

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