将Dynamic ArrayList与ArrayList进行比较!并删除动态数组中不存在的元素

时间:2015-07-13 07:55:36

标签: java performance arraylist

我有两个ArrayListscontactModelslist

contactModels是动态Arraylist,我需要比较两个列表并删除listcontactModels中不存在的元素(DynamicArrayList)。

我尝试了嵌套循环,并且:

  for (int i = 0; i < list.size(); i++)
  {    
    if(!contactModels.get(i).getEmpID().equals(list.get(i).getEmpID()))
       {
        databaseadapter.removeContact(contactModels.get(i));
       }

  }

但我无法实现它。

2 个答案:

答案 0 :(得分:1)

您没有测试contactModelslist中的项目是否不存在。相反,您正在测试contactModels中存在的索引处的项目是否与list中相同索引处的项目具有相同的ID。

只有当两个集合都按照id进行排序,并且contactModels至少具有与列表一样多的条目时,这才有效。

那是你的情况吗?否则这可能是你的问题。

如果您的馆藏中的项目equalshashcode已正确实施,并且如果其ID相等则您可以使用此类内容

for (<TypeOfYourItems> item : list)
  {    
    if(!contactModels.contains(item))
       {
        databaseadapter.removeContact(item);
       }
  }

答案 1 :(得分:0)

@Praneeth:Java提供了API。所以你可以使用它。 “list.removeAll(contactModels);”

如果contactModel具有非原始元素,那么您可以覆盖equals和hash代码以告知您的对象将在何种基础上相等。

现在,您的列表将仅包含联系模型中不存在的唯一元素。

所以现在你也不需要其他方法来删除它。