Java 如何将arraylist复制到不反映原始列表中的更改?
如何将列表复制到另一个列表,并对新列表中包含的对象进行更改,而不影响旧列表中的对象Java 如何将arraylist复制到不反映原始列表中的更改?,java,gwt,Java,Gwt,如何将列表复制到另一个列表,并对新列表中包含的对象进行更改,而不影响旧列表中的对象 class Foo { String title; void setTitle(String title) { this.title = title; } } List<Foo> original; List<Foo> newlist = new ArrayList<Foo>(original); for (Foo foo : newlist) { foo
class Foo {
String title;
void setTitle(String title) { this.title = title; }
}
List<Foo> original;
List<Foo> newlist = new ArrayList<Foo>(original);
for (Foo foo : newlist) {
foo.setTitle("test"); //this will also affect the objects in original list.
//how can I avoid this?
}
class-Foo{
字符串标题;
void setTitle(字符串标题){this.title=title;}
}
列出原件;
List newlist=新阵列列表(原件);
for(Foo-Foo:newlist){
setTitle(“test”);//这也会影响原始列表中的对象。
//我怎样才能避免这种情况?
}
您可以尝试以下操作:
public ArrayList<Foo> deepCopy(ArrayList<Foo> obj)throws Exception
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
baos.writeObject(obj);
oos.close();
ByteArrayInputStream bins = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream oins = new ObjectInputStream(bins);
ArrayList<Foo> ret = (ArrayList<Foo>)oins.readObject();
oins.close();
return ret;
}
public ArrayList deepCopy(ArrayList obj)引发异常
{
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
ObjectOutputStream oos=新的ObjectOutputStream(BAS);
编写对象(obj);
oos.close();
ByteArrayInputStream bins=新的ByteArrayInputStream(baos.toByteArray());
ObjectInputStream oins=新ObjectInputStream(箱);
ArrayList ret=(ArrayList)oins.readObject();
oins.close();
返回ret;
}
您必须克隆对象,但随后必须实现克隆方法才能使其工作。换句话说,没有一个简单、通用的交钥匙解决方案
List<Foo> original;
List<Foo> newList=new ArrayList<Foo>();
for (Foo foo:original){
newList.add(foo.clone();
}
//Make changes to newList
您必须克隆原始列表中的对象并将其添加到新列表中您可以克隆,但这可能不是解决方案,请尝试搜索
深度复制
和浅层复制
这通常很好,但我在客户端使用GWT,所以不幸的是,我发现我无法使用此。。。
class Foo {
String title;
void setTitle(String title) { this.title = title; }
Foo clone(Foo foo){
Foo result=new Foo();
result.setTitle(foo.title);
return result;
}
}