list赋值问题

linpyi 2008-05-09 12:47:00
现在有个list里面存放的值是一个bean的类型

我现在把他进行循环,把bean的值改变了,赋值给另外一个list

结果,2个list的值是一样的,

我想做的就是bean改变后,原来那个list的值不变

import java.util.ArrayList;


public class TestMain {

private static ArrayList list=new ArrayList();;
private static ArrayList list1=new ArrayList();;
/**
* @param args
*/
public TestMain(){

}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestBean bean = new TestBean();
bean.setName("1111");
list.add(bean);
TestBean bean2 = new TestBean();
bean2.setName("2222");
list.add(bean2);
System.out.println("********");
for(int i=0;i<list.size();i++){
TestBean bean1 = (TestBean)list.get(i);
System.out.println(bean1.getName());
list1.add(bean);
}
System.out.println("*************");
ArrayList str1=replace(list1);
for(int i=0;i<list.size();i++){
TestBean bean1 = (TestBean)list.get(i);
System.out.println(bean1.getName());
}
System.out.println("*************");
for(int i=0;i<str1.size();i++){
TestBean bean1 = (TestBean)list.get(i);
System.out.println(bean1.getName());
}
System.out.println("********");
}
public static ArrayList replace(ArrayList str){
ArrayList test = new ArrayList();
for(int i=0;i<str.size();i++){
TestBean bean = (TestBean)list.get(i);
bean.setName("33333");
test.add(bean);
}
return test;

}


}
class TestBean {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}



现在运行的结果是
********
1111
2222
*************
33333
33333
*************
33333
33333
********


我想要的结果是
********
1111
2222
*************
1111
2222
*************
33333
33333
********
原来的list的值不变
...全文
791 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
homesos 2008-05-09
  • 打赏
  • 举报
回复
改法一:

replace()方法中:
TestBean bean = (TestBean)list.get(i);
bean.setName("33333");
test.add(bean);
=>
TestBean bean = (TestBean)list.get(i);
TestBean bean2 = new TestBean();
bean2.setName(bean.getName());
test.add(bean2);



改法二:

//增加TestBean构造方法
class TestBean {
TestBean(string strName)
{
name = strName;
}

//replace()方法中
test.add(new TestBean(((TestBean)list.get(i))).getName());
kekeemx 2008-05-09
  • 打赏
  • 举报
回复
for(int i=0;i<list.size();i++){
TestBean bean1 = (TestBean)list.get(i);
System.out.println(bean1.getName());
list1.add(bean);
}

这里list1.add都是add同一个bean对象吧.楼主应该是想add(bean1)吧
linpyi 2008-05-09
  • 打赏
  • 举报
回复
什么意思
yami251139 2008-05-09
  • 打赏
  • 举报
回复
用add。。
南南北北 2008-05-09
  • 打赏
  • 举报
回复
如果Bean里的属性都是基本数据类型或者String类型,就不用重写clone方法了。

另:实现Cloneable接口也可以...
南南北北 2008-05-09
  • 打赏
  • 举报
回复
重写bean的clone()方法,该方法继承自Object类。
简单点说:
public class CloneTest {

private Bean bean;

@Override

public Object clone() throws CloneNotSupportedException{
CloneTest ct = (CloneTest)super.clone();
ct.setBean((Bean)bean.clone());
return ct;
}

//getter and setter
}

class Bean {
private String name;

//getter and setter

@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}


ps:为什么firefox不能插入代码?
linpyi 2008-05-09
  • 打赏
  • 举报
回复
********
1111
2222
*************
1111 调用方法后list的值不变
2222
*************
1111 改变后新的list的值
3333
********

linpyi 2008-05-09
  • 打赏
  • 举报
回复
我想经过replace方法,出来一个新的list而原来的list值不变
可能是我搞晕了


public static ArrayList replace(ArrayList str){
ArrayList test = new ArrayList();
for(int i=0;i<str.size();i++){
TestBean bean = (TestBean)list.get(i);
TestBean bean1=new TestBean();
if(bean.getName().equals("1111")){
bean1.setName(bean.getName());
}else{
bean1.setName("3333");
}
test.add(bean1);

}
return test;

}



回复5楼,
浅克隆,如果你的bean中还包含其他对象,重写bean的clone()方法,进行深克隆。

怎么个写法
bean里面的值太多了,一个个写会死人的,而且可能出现人为错误
believefym 2008-05-09
  • 打赏
  • 举报
回复
 TestBean bean = (TestBean)list.get(i);
bean.setName("33333");//想原来的list不变你这里为啥要自己去改变
南南北北 2008-05-09
  • 打赏
  • 举报
回复
for(int i=0;i<list.size();i++){
TestBean bean1 = (TestBean)list.get(i);
System.out.println(bean1.getName());
list1.add(bean1.clone());//调用clone()方法
}

浅克隆,如果你的bean中还包含其他对象,重写bean的clone()方法,进行深克隆。

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧