关于集合的克隆问题

biaoflying 2007-01-07 05:39:53
import java.util.*;

public class TestClone
{
public static void main(String[] args){
ArrayList<Integer> list=new ArrayList<Integer>();
for(int i=0;i<5;i++)list.add(i);
ArrayList list1=(ArrayList)list.clone();
list1.remove(2);
System.out.println(list);
System.out.println(list1==list);
}
}
打印的是【1,2,3,4】,还有就是false,这时为什么呢?
...全文
351 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovejie8525 2008-07-04
  • 打赏
  • 举报
回复
sfs
歪嘴鱼 2007-01-07
  • 打赏
  • 举报
回复
不好意思,我又唐僧了
biaoflying 2007-01-07
  • 打赏
  • 举报
回复
本着求知和诚实的精神,其实我还是不太懂。
多谢楼上的兄弟诚心帮助小弟了
歪嘴鱼 2007-01-07
  • 打赏
  • 举报
回复
如果clone实现的功能仅仅是和=等价,那么有何苦重复劳动来设计这么一个东西呢。

clone,含义是复制。

第七日里面史瓦辛格大叔被clone()了一把,完后他/他们是一个人还是两个人呢?

最后直升机上面两个位置可是都坐了人哦
歪嘴鱼 2007-01-07
  • 打赏
  • 举报
回复
来段源码======jdk1.5 for linux src ArrayList.java ln 247=========

/**
* Returns a shallow copy of this <tt>ArrayList</tt> instance. (The
* elements themselves are not copied.)
*
* @return a clone of this <tt>ArrayList</tt> instance.
*/
public Object clone() {
try {
ArrayList<E> v = (ArrayList<E>) super.clone();
v.elementData = (E[])new Object[size];
System.arraycopy(elementData, 0, v.elementData, 0, size);
v.modCount = 0;
return v;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}

==========================================
歪嘴鱼 2007-01-07
  • 打赏
  • 举报
回复
clone

public Object clone()

Returns a shallow copy of this ArrayList instance. (The elements themselves are not copied.)

Overrides:
clone in class Object

Returns:
a clone of this ArrayList instance.
See Also:
Cloneable

========================
看了一下API,明白LZ说的意思了
(The elements themselves are not copied.)
应该是说这句话吧。

看看下面的能不能说清楚。

Object a=new Object();
Object b=a;
a=null;
assert(b==null); // ??????

=======
在list中remove(2)了,但是list2是包含另一个指针(引用),指向相同的地方,
所以elementAt(2)还是好好的,gc不管他的
至于这个false那就比较简单了,== 和 equals() 的区别应该还是可以区分的。
对于对象前者比较地址,后者比较值。原始类型没有equals方法哦


biaoflying 2007-01-07
  • 打赏
  • 举报
回复
我认为他们没有区别,如果书上没有说错的话,ArrayList list1=(ArrayList)list.clone();
这一行就包含了你所说的意思
歪嘴鱼 2007-01-07
  • 打赏
  • 举报
回复
不好意思,随便一讲。
如果一样的话那么他从逻辑上和
List list1=list;
区别应该是什么呢?
biaoflying 2007-01-07
  • 打赏
  • 举报
回复
楼上的兄弟好不客气。
我的意思是克隆后的list应该也是指向之前的集合的,应该会修改容器的对象。
歪嘴鱼 2007-01-07
  • 打赏
  • 举报
回复
都说是克隆了,你如果有个孪生兄弟被人砍了手,你的手也没了?

62,614

社区成员

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

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