您的位置:首页 > 编程语言 > Java开发

Java:类的两个相同对象数组的克隆问题

2014-10-18 00:00 316 查看
摘要: 对象数组,想保持修改护不影响,有没有简单的方法

做一个关于对象数组的问题,需要对对象数组进行分阶段的修改,但是当前阶段判断的依据是当前的对象数组的情况,如果边判断边修改会影响判断结果,比如 假设对象数组 grid[][]如下 gridOld[][] = grid[][]

a b c d

b c d a

如果一个位置相邻(上下左右四个方向)的和它自己都不一样,那么变成数量多的那个,有一样的就不变

现在第一行的 a 下一次应该变为b ,第一行的b下一次应该变为c

如果判断是根据gridOld而修改的是grid,因为“=”是相当于引用,所以修改grid也会影响gridOld,调试时可以看到他们指向相同一块内存

所以结果就是 a 下一次是b,而b下一次还是b,因为原来的第一个a已经被修改为b了

原来试过clone()方法,但是由于时间紧迫,不知道是用法不对还是需要重写,在对象数组克隆时情况和直接用等号相同,所以后来就自己写了一个比较无奈的遍历重建对象数组的方法。

//cells和cellOld是Cell[sizeGrid][sizeGrid]的二维数组
double random;
for(int i = 0; i<this.sizeGrid; i++){ //Grid是正方形表格 sizeGrid是表格边长
for(int j = 0; j<this.sizeGrid; j++){
if(cells[i][j] instanceof MutatedCell){//判断当前格子是三种情况的哪一种
MutatedCell mC = new MutatedCell();//新建一个同类型对象
cellOld[i][j]=mC;	//赋值给cellOld中对应位置
}else if(cells[i][j] instanceof NormalCell){
NormalCell nC = new NormalCell();//如果带可变的属性,需要在把属性赋值给新建的对象
nC.setstamina(((NormalCell) cells[i][j]).getstamina());//保持两个对象内容相同
cellOld[i][j]=nC;
}else if(cells[i][j] instanceof DeadCell){
DeadCell dC = new DeadCell();
cellOld[i][j]=dC;
}
}
}


在接下来的根据cellOld的判断而修改cells内容的过程中就不会出现问题,但是在每一次将数据遍历一遍后,新的一遍又要重复上述复制过程,感觉效率很低。不知道有没有比较快捷的方法,望指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息