我有一个包含值的字符串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