gpt4 book ai didi

java - 比较两个 ArrayList

转载 作者:行者123 更新时间:2023-12-01 18:46:41 25 4
gpt4 key购买 nike

我有两个相同类型的 arrayList,我想根据 ValueList 中的特定属性来比较这两个数组。值列表

ValueList A contains
1,10,5,
2,20,3
3,40,5,
4,60,8

ValueList B contains
2,20,3
3,40,5

我想比较基于 line_num 的列表并创建另一个 arraylist 结果,如果 line_num 存在于 ValueList A 中但不存在于 ValueList B 中,则结果中的值字段必须为 -1。结果应该是这样的;

Result
10,-1
20,3
40,5,
60,-1

我无法编写“未找到”条件。有人可以帮我吗?

我的代码

List<Result> result= new ArrayList<Result>();
for(ValueList data1: valueListA) {
for (ValueList data2: valueListB) {
Result inter = new Result();
if(data1.getLine_num==data2.getLine_num) {
inter.setKey(data1.getKey());
inter.setValue(data1.getValue());
result.add(inter);
}
}
}

更新后的代码有效:

public static  List<Result> result;= new ArrayList<Result>();
....

int i1 = 0,int i2 = 0;
Result inter = new Result();
while (i1 < valueListA.size() && i2 < valueListB.size()) {
ValueList data1 = valueListA.get(i1);
ValueList data2 = valueListB.get(i2);
if (data1.getLine_num == data2.getLine_num) {
// Add the result.
result= new ArrayList<Result>();

inter.setValue(data1.getValue());
inter.setKey(data1-getKey())
result.add(inter);
i1++;
i2++;
} else if (data1.getLine_num < data2.getLine_num) {
result= new ArrayList<Result>();
// Add -1 because the data was not in valueListB.
inter.setValue(data1.getValue());
inter.setKey(-1);
result.add(inter);
i1++;
} else {
i2++;
}

}

最佳答案

从算法的角度来看:

在内循环开始之前添加一个等于false的 boolean 变量found。然后,当您找到一个时,将其设置为true

循环结束后,测试变量 found,如果为 false,则添加 -1。

List<Result> result= new ArrayList<Result>();
for(ValueList data1: valueListA){
boolean found = false;
for (ValueList data2: valueListB){
Result inter= new Result();
if(data1.getLine_num==data2.getLine_num){
inter.setKey(data1.getKey());
inter.setValue(data1.getValue());
result.add(inter);
found = true;
break;
}
}
if (!found) {
result.add(...)
}
}

但是,Java 提供了更好的解决方案,请参阅其他答案。

但是,如果列表像您的示例中那样排序,那么您就有更好的算法。您可以使用单个 while 循环和 2 个索引(每个列表一个)。复杂度将从 O(N*M) 下降到 O(N+M)。

int i1 = 0;
int i2 = 0;
while (i1 < valueListA.size() && i2 < valueListB.size()) {
ValueList data1 = valueListA[i1];
ValueList data2 = valueListB[i2];
if (data1.getLine_num == data2.getLine_num) {
// Add the result.
i1++;
i2++;
} else if (data1.getLine_num < data2.getLine_num) {
// Add -1 because the data was not in valueListB.
i1++;
} else {
i2++;
}
}

关于java - 比较两个 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17522647/

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