把你的clone()代码改成这样试试:
<<
public Object clone() throws CloneNotSupportedException {
Object o = super.clone();
((Snake)o).next = (next==null?null:(Snake)next.clone());
return o;
}
>>
<<
public Object clone() throws CloneNotSupportedException {
Object o = super.clone();
((Snake)o).next = (next==null?null:(Snake)next.clone());
return o;
}
>>
这样可以,我那么写为什么不行,能解释一下吗?是基本概念搞错了吗?
再问一个问题,vector 和arraylist的具体区别是什么?
呵呵,倒不是基本概念错误不错误的问题,而是编程的基本技能吧。
首先,这么写就会导致编译不能通过:
<< o.next = (Snake)o.next.clone(); >>
其次,即便修改正确了,这样写的语句也可能会导致NullPointerException异常的产生,因为你不能保证o.next一定不为null。
这个clone实现本质上是一个递归的实现,所以修改成这样:
<< ((Snake)o).next = (next==null?null:(Snake)next.clone()); >>关于Vector和ArrayList,其本质可以说是一样的。都是List聚集的实现,而且都是采用的数组来表示存储,同样都是顺序存储的。区别主要在于:
(1) Vector的方法是synchronized的,而ArrayList不是;
(2) Vector是java 1.1的遗留产物,而ArrayList是JAVA2中Collections Framework中的一个实现,之所以保留Vector是为了保证向前的兼容性;
所以说,在使用List实现的时候,请选择使用ArrayList而不是Vector。
另外,如果希望ArrayList得到与Vector式的线程安全性,可以这样做:
<<
List list = Collections.synchronizedList(new ArrayList());
>>