我有两个名为list
和sum
的数组列表来自此类:
public class Factor {
private String cat;
private String kind;
private String name;
private int number;
private String id;
}
我的目的是比较这两个arraylist,如果他们有相同的对象,列表编号=总和编号,否则sum对象添加到列表。
这是我到目前为止的尝试:
int size=list.size();
for (int j=0; j<size ;j++){
for (int i = 0; i < sum.size(); i++) {
if (list.get(j).getId().equals(sum.get(i).getId())){
list.get(i).setNumber(sum.get(i).getNumber());
} else {
list.add(new Factor(sum.get(i).getId(),sum.get(i).getCat(),sum.get(i).getKind(), sum.get(i).getName(), sum.get(i).getNumber()));
}
}
}
但问题始终是两个条件运行,它意味着在list.get(i).setNumber(sum.get(i).getNumber());
然后在其他地方做
list.add(new Factor(sum.get(i).getId(),sum.get(i).getCat(), sum.get(i).getKind(),
sum.get(i).getName(), sum.get(i).getNumber()));
总是添加列表......所以我错了?
答案 0 :(得分:1)
你的逻辑错误。
根据评论,您希望在list
中添加sum
list
中没有匹配ID的所有元素。为此,您应首先迭代sum
的元素(即在外循环中)。
int size=list.size();
for (int i = 0; i < sum.size(); i++) {
boolean found = false;
for (int j=0; j<size ;j++) {
if (list.get(j).getId().equals(sum.get(i).getId())) {
list.get(j).setNumber(sum.get(i).getNumber());
found = true;
break;
}
}
if (!found) {
list.add(new Factor(sum.get(i).getId(),sum.get(i).getCat(), sum.get(i).getKind(),
sum.get(i).getName(), sum.get(i).getNumber()));
}
}
答案 1 :(得分:0)
你需要确保两个列表大小相同,所以如果它们的大小不同,它们将不相等
这也是比较两个列表的不好做法,更好的方法是使用Set,只需将其中一个列表转换为一个集合(时间复杂度为O(n))然后循环遍历另一个列表并检查是否所有元素在您从其他列表创建的集合中,您还需要处理重复的大小写,因此如果列表中允许重复,则需要使用映射,其中id是键,值是数字发生时,如果找到密钥则迭代其他列表,减少数量并检查它是否小于零。
答案 2 :(得分:0)
从您的问题来看,您仍然不清楚您要通过此代码实现的目标。你想比较列表数组的每个元素和sum数组的每个元素,或者你只想比较列表数组和sum数组的相应元素。
根据我的理解,
从你的代码中,我可以看到你正在使用嵌套的厕所。
***for (int j=0; j<size ;j++)
{
for (int i = 0; i < sum.size(); i++) {}}***
因此,对于每个list(j)数组,它将比较sum(i)数组的所有元素,其中一些将执行IF块,一些将根据条件执行else块。
如果这不是你要找的东西,他们会更清楚你的问题。