我有一个要显示在屏幕上的对象列表。用户可以根据需要更改它们,然后点击提交。在提交方法中,我将存储的原始列表和当前列表进行比较。我必须创建第三个列表,其中包含添加、删除或更改的所有对象,并使用操作代码指定它是哪个对象。对象有一个 id 来标识它们,默认为 0。
我该怎么做?这是我能想到的最好的(伪代码),但它看起来很草率。
for (currentObject : objects in current list)
if (currentObject.id is 0)
//Was added
for (oldObject : objects in original list)
if (currentObject.id == oldObject.id)
//Existed - compare other fields to see if changed
for (oldObject1 : objects in original list)
boolean existed = false;
for (currentObject1 : objects in current list)
if(oldObject1.id == currentObject1.id)
existed=true;
if (!existed)
//Was removed
最佳答案
如果顺序无关紧要,您只关心元素是添加还是删除,您可能需要考虑更改数据结构并使用 Set
而不是 List
。 Set
类型专门设计用于确定元素是否存在并高效地执行此操作,代价是您不再记得元素的顺序。
例如,使用HashSet
,您可以执行以下操作:
Set<T> oldElems = new HashSet<T>(originalList);
Set<T> newElems = new HashSet<T>(currentList);
for (T obj : oldElems) {
if (!newElems.contains(obj)) {
/* ... this object was removed ... */
}
}
for (T obj : newElems) {
if (!oldElems.contains(obj)) {
/* ... this object was added ... */
}
}
希望这对您有所帮助!
关于java - 比较两个列表的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17199207/