我有一個包含值的字符串arraylist ListA
,比如{a,b,c,d}
。我做了一些操作和ListA
現在包含,比如說,{b,c,e}
獲取從字符串arraylist中刪除和添加的元素
我必須找出所有元素已經從ListA
即a
和d
什麼所有元素都被加入即e
刪除。
請幫忙。我是Java新手,並且堅持這一點。
我有一個包含值的字符串arraylist ListA
,比如{a,b,c,d}
。我做了一些操作和ListA
現在包含,比如說,{b,c,e}
獲取從字符串arraylist中刪除和添加的元素
我必須找出所有元素已經從ListA
即a
和d
什麼所有元素都被加入即e
刪除。
請幫忙。我是Java新手,並且堅持這一點。
在任何修改之前,您需要使用臨時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());
}
}
「沒有任何直接的方法來找到它。」除非操作系統計劃繼承使用的列表類並重寫'add'和'remove'方法以跟蹤已添加或刪除的項目 – 2013-05-07 11:33:29
謝謝Ketan。如果您能請告訴我這樣做的邏輯,我會很感激。如果我沒有錯,我們將不得不使用嵌套for循環。卡住for循環中的邏輯。 – user2358066 2013-05-07 11:34:56
@MarcoForberg是可能的......好主意。 – Ketan 2013-05-07 11:37:17
你實際上有3個選擇我可以建議。
有一個referenceList,您可以在其中比較修改後的ListA,以便列出添加/刪除的元素。
請參閱Noob UnChained對示例代碼的回答。
而不是使用Arraylist
,擴展它,並覆蓋remove()
&菜鳥奔放的方法來添加(確保你堅持到超()的調用,以防萬一)邏輯存儲單元被刪除/添加。
請參閱Evgeniy Dorofeev的示例代碼的答案。
而不是直接調用add()/remove()
編寫工具方法這將反過來調用與要素存儲到add()/remove()
沿着add()/remove()
從相應addedList
& removedList
示例代碼,你可以用它來開拓出更好的解決方案:
// 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);
}
}
謝謝Noob Unchained。添加的元素是可檢索的。但是,刪除的元素未被打印。請幫忙。 – user2358066 2013-05-07 11:57:40
你可以列出的定製版本這樣
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;
}
做一個臨時的'ArrayList'其中包含了舊價值和它的值與新創建'ArrayList'。 – Maroun 2013-05-07 11:25:57
你的ArrayList實例只包含一個快照,爲了比較你需要一個參考點。 – Ankit 2013-05-07 11:26:31
1。迭代你的初始列表並檢查每個單個項是否你的結果列表包含ist - >如果它沒有被刪除。 2.現在迭代你的結果列表,並檢查你的初始列表是否包含項目 - >曾經不存在的項目已添加 – 2013-05-07 11:29:30