java - 比较两个列表的算法

标签 java algorithm list data-structures

我有一个要显示在屏幕上的对象列表。用户可以根据需要更改它们,然后点击提交。在提交方法中,我将存储的原始列表和当前列表进行比较。我必须创建第三个列表,其中包含添加、删除或更改的所有对象,并使用操作代码指定它是哪个对象。对象有一个 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 而不是 ListSet 类型专门设计用于确定元素是否存在并高效地执行此操作,代价是您不再记得元素的顺序。

例如,使用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/

相关文章:

java - 不允许在 Java 方法覆盖上使用父类(super class)型的原因是什么?

java - 添加到自定义列表

algorithm - 如何计算以下算法的时间复杂度

algorithm - 找到区间最大交点出现2次的点

python - 防止 "if"python 中的部分字符串匹配)

list - 平面列表和自由单子(monad)

java - 在一个 try 语句中打开多个资源不可靠吗?为什么?

JAVA:replaceAll 正则表达式模式

java - 如何检测文件是否不是utf-8编码?

算法帮助 : divide a matrix to N continuous cells, 具有接近相等的项目总和