2013-05-07 111 views
1

我有一个包含值的字符串arraylist ListA,比如{a,b,c,d}。我做了一些操作和ListA现在包含,比如说,{b,c,e}获取从字符串arraylist中删除和添加的元素

我必须找出所有元素已经从ListAad什么所有元素都被加入即e删除。

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

+2

做一个临时的'ArrayList'其中包含了旧价值和它的值与新创建'ArrayList'。 – Maroun 2013-05-07 11:25:57

+0

你的ArrayList实例只包含一个快照,为了比较你需要一个参考点。 – Ankit 2013-05-07 11:26:31

+0

1。迭代你的初始列表并检查每个单个项是否你的结果列表包含ist - >如果它没有被删除。 2.现在迭代你的结果列表,并检查你的初始列表是否包含项目 - >曾经不存在的项目已添加 – 2013-05-07 11:29:30

回答

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()); 
} 
} 
+0

“没有任何直接的方法来找到它。”除非操作系统计划继承使用的列表类并重写'add'和'remove'方法以跟踪已添加或删除的项目 – 2013-05-07 11:33:29

+0

谢谢Ketan。如果您能请告诉我这样做的逻辑,我会很感激。如果我没有错,我们将不得不使用嵌套for循环。卡住for循环中的逻辑。 – user2358066 2013-05-07 11:34:56

+0

@MarcoForberg是可能的......好主意。 – Ketan 2013-05-07 11:37:17

4

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

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

    请参阅Noob UnChained对示例代码的回答。

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

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

  3. 而不是直接调用add()/remove()编写工具方法这将反过来调用与要素存储到add()/remove()沿着add()/remove()从相应addedList & removedList

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); 
    } 
} 
+0

谢谢Noob Unchained。添加的元素是可检索的。但是,删除的元素未被打印。请帮忙。 – user2358066 2013-05-07 11:57:40

1

你可以列出的定制版本这样

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; 
    }