Thinking in java 书中一问?

古布 2004-10-23 12:18:52
如何对链表进行深度拷贝! 代码如下:

public class Snake implements Cloneable {

/**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args) {
// TODO: Add your code here
Snake s = new Snake(5, 'A');
System.out.println("s=" + s);

Snake s1 = (Snake) s.clone();
s1.increase(); //这里是一个浅拷贝!
System.out.println("s1=" + s1.toString());
}
public Snake( int n, char c ) {
ch = c;
if ( --n > 0 ) {
next = new Snake( n, (char)(c + 1) );
}
}
public String toString() {
String s = ":" + ch;
if ( next != null ) {
s += next.toString();
}
return s;
}
public Object clone() {
Object obj = null;
try {
obj = super.clone();
}catch( CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
public void increase() {
ch++;
if ( next != null ) {
next.increase();
}
}
private char ch;
private Snake next;
}
...全文
108 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhigangxie 2004-10-23
  • 打赏
  • 举报
回复
一种不用思考的方法:
1. 写入 ObjectOutputStream
2. 从 ObjectInputStream 读入
treeroot 2004-10-23
  • 打赏
  • 举报
回复
可以这样实现:
public Object clone() {
Snake obj = null;
try {
obj = super.clone();
}catch( CloneNotSupportedException e) {
e.printStackTrace();
}
int n=1;
while(obj.next!=null) n++;
return new Snake(n,obj.ch);
}
treeroot 2004-10-23
  • 打赏
  • 举报
回复
一般情况下深拷贝比较容易,但是你这个是一个链表,但是构造函数又只有一个,而且要
提供链表的长度,所以相对比较麻烦,这里先获得链表长度,在重新构建链表.

public Object clone() {
Snake obj = null;
try {
obj = super.clone();
}catch( CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}

62,614

社区成员

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

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