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()方法,但是由于时间紧迫,不知道是用法不对还是需要重写,在对象数组克隆时情况和直接用等号相同,所以后来就自己写了一个比较无奈的遍历重建对象数组的方法。
在接下来的根据cellOld的判断而修改cells内容的过程中就不会出现问题,但是在每一次将数据遍历一遍后,新的一遍又要重复上述复制过程,感觉效率很低。不知道有没有比较快捷的方法,望指点。
做一个关于对象数组的问题,需要对对象数组进行分阶段的修改,但是当前阶段判断的依据是当前的对象数组的情况,如果边判断边修改会影响判断结果,比如 假设对象数组 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内容的过程中就不会出现问题,但是在每一次将数据遍历一遍后,新的一遍又要重复上述复制过程,感觉效率很低。不知道有没有比较快捷的方法,望指点。
相关文章推荐
- C#中比较两个对象的地址是否相同(也是引用计数的问题,和Java一样)
- java通过xstream将xml转换为java对象遇到的问题(一个对像中两个子类的类名相同)
- Java对象数组初始化与NullPointerException问题
- 关于Java交换两个对象的问题
- JAVA对象克隆可能会出现的问题
- 关于Java交换两个对象的问题
- 合并两个含有相同id的对象数组
- 求两个有序数组相同元素的个数-JAVA
- java怎么判断两个Set 里的对象的值是否相同
- java怎么判断两个Set 里的对象的值是否相同
- java中用equals比较两个内容相同的字符数组
- 两个List比较各自对象的属性相同的问题
- java两个相同Bean对象复制
- 关于Java交换两个对象的问题
- java怎么判断两个Set 里的对象的值是否相同【两个set中的值是否相等】、java treeset和hashset如何判断元素是否相同【即对象是否完全相同;利用一个set去除重复元素】
- Java对象数组初始化与NullPointerException问题
- java 对象比较 判断两个对象的某些或某个属性相同 这对象相等。
- Java对数组的操作(三)—比较两个数组中的元素是否相同的最简单方法
- 《Java面试试题》找出连续数组中相同的两个数值
- Java代码解决两个数组归并问题