2013-05-07 135 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; 
    }