2

我有一个包含值的字符串数组ListA列表,比如说{a,b,c,d}。我做了一些操作,ListA现在包含,比如说,{b,c,e}

我必须找出已从ListAie中删除的所有元素a以及d已添加的所有元素 ie e

请帮忙。我是 Java 新手,我坚持这一点。

4

4 回答 4

4

你实际上有我可以建议的 3 个选项。

  1. 有一个referenceList,您可以从中比较修改后的ListA,以便您可以列出添加/删除的元素。

    有关示例代码,请参阅 Noob UnChained 的答案。

  2. 而不是使用Arraylist,扩展它并覆盖remove()& Noob UnChained 方法来添加(确保你坚持调用 super() 以防万一)逻辑来存储被删除/添加的元素。

    有关示例代码,请参阅 Evgeniy Dorofeev 的答案。

  3. 而不是直接调用add()/remove()Write 实用程序方法,该方法将依次调用add()/remove()并将该元素存储到add()/remove()相应的addedList&removedList

于 2013-05-07T11:34:06.933 回答
3

您需要使用临时 ArrayList,这是您在进行任何修改之前的初始数组列表。

然后你需要用一个新的arraylist循环并比较和提取等等……等等。

它只能使用编程来完成。没有任何直接的方法可以找到这个。


查看更新

public class ListTracAddedAndRemoved {

public static void main(String[] args) {
ArrayList<String> old = new ArrayList<String>();
old.add("a");
old.add("b");
old.add("c");

ArrayList<String> newOne = new ArrayList<String>();
newOne.add("b");
newOne.add("d");
newOne.add("e");

ArrayList<String> removed = new ArrayList<String>();
for (String oldString : old) {
    if(!newOne.contains(oldString)){
    removed.add(oldString);
    }
}

ArrayList<String> newAdded = new ArrayList<String>();
for (String newString : newOne) {
    if(!old.contains(newString)){
    newAdded.add(newString);
    }
}

System.out.println("Removed: "+removed.toString());
System.out.println("NewAdded: "+newAdded.toString());
}
}
于 2013-05-07T11:31:29.747 回答
1

您可以像这样制作自定义版本的 List

class TestList implements List {
    List list = new ArrayList();
    List added = new ArrayList();
    List removed = new ArrayList();
    public void add(int index, Object element) {
        added.add(e);
        list.add(index, element);
    }
    public Object remove(int index) {
        removed.add(get(index));
        return list.remove(index);
    }
    ...
    public List getAdded() {
        return added;
    }
    public List getRemoved() {
        return removed;
    }
于 2013-05-07T11:39:20.870 回答
1

示例代码,您可以使用它来制定更好的解决方案:

// your initial list
List<String> oldList = new ArrayList<String>();
// new List , which you will manipulate
List<String> newList = new ArrayList<String>(oldList);

// add , remove elements from the newList

for(String element:oldList){
    if(!newList.contains(element)){
        System.out.println("New list has removed :"+element);
    }
}

for(String element:newList){
    if(!oldList.contains(element)){
        System.out.println("New list has added :"+element);
    }
}
于 2013-05-07T11:35:45.760 回答