比较两个不起作用的阵列列表对象



我有两个数组列表,其中有名称listsum来自此类类:

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()));

总是添加列表...所以我在哪里错了?

您的逻辑不正确。

基于注释,您要添加到listsum的所有元素,这些元素在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)数组的所有元素,并且如果块和有些人将执行其他块,则有些将执行。

如果这不是您在寻找的东西,他们对您的问题给出了更多的清晰度。

最新更新