我有两个数组列表,其中有名称list
和sum
来自此类类:
public class Factor {
private String cat;
private String kind;
private String name;
private int number;
private String id;
}
我的目的是比较此两个arraylist,如果它们具有相同的对象,列表号=总数sum 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()));
总是添加列表...所以我在哪里错了?
您的逻辑不正确。
基于注释,您要添加到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()));
}
}
您需要确保两个列表大小相同,因此,如果它们的尺寸与相同的尺寸,则不会等于
这是比较两个列表的不良习惯,更好的方法是使用一组,只需将其中一个列表转换为集合(时间复杂性o(n)),然后循环循环到另一个列表,然后检查是否所有元素位于您从另一个列表中创建的集合中,您也需要照顾重复的情况,因此,如果允许在列表中使用副本,则需要使用映射,其中ID是密钥,值是值出现,如果发现键的数字减小并检查其是否少于零,则在其他列表上迭代时。
从您的问题中,仍然不清楚您试图从此代码中实现的目标。您是否想将列表数组的每个元素与总和数组的每个元素进行比较?
根据我的理解,
从您的代码中,我可以看到您正在使用嵌套宽度。
***for (int j=0; j<size ;j++)
{
for (int i = 0; i < sum.size(); i++) {}}***
因此,对于每个列表(j)数组,它将比较总和(i)数组的所有元素,并且如果块和有些人将执行其他块,则有些将执行。
。如果这不是您在寻找的东西,他们对您的问题给出了更多的清晰度。