java中链表的克隆问题

代码如下:

 import java.util.*;
public class Example12_6 {
   public  static void main(String args[]) {
      LinkedList<String> list1=new LinkedList<String>();
      list1.add("A");
      list1.add("B");
      list1.add("C");
      list1.add("D");
      list1.add("E");
      LinkedList<String> list2 =(LinkedList<String>)list1.clone();  //这里我有两个问题不明白,
            //第一是带有类型参数的泛型链表这样强制转化不是会擦除吗?
            //和拿LinkedList直接进行强制转化有区别吗?
            //第二是LinkedList中的clone方法不是浅复制吗?
            //那么list2中的元素指向的不也是list1中的元素吗?
            //那么下面对list1进行洗牌后list2中的元素怎么不变呢?
      System.out.print("链表中的数据:");
      Iterator<String> iter=list1.iterator();
      while(iter.hasNext()) {
         String str=iter.next();
         System.out.print(str+" ");
      }
      Collections.shuffle(list1);   //洗牌
      System.out.printf("\n洗牌后链表中的数据:");
      iter=list1.iterator();
      while(iter.hasNext()) {
         String str=iter.next();
         System.out.print(str+" ");
      }
      System.out.printf("\n链表中的数据:");
      iter=list2.iterator();
      while(iter.hasNext()) {
         String str=iter.next();
         System.out.print(str+" ");
      }
      Collections.rotate(list2,2);   //向右旋转2步
      System.out.printf("\n向右旋转2步后链表中的数据:");
      iter=list2.iterator();
      while(iter.hasNext()) {
         String str=iter.next();
         System.out.print(str+" ");
      }
   } 
}

本人还是小白一枚,虚心求教。

第一个图,如果你通过list1删除了一个球,那么list2也少了一个球,因为list1和list2根本就是一个列表。

第二个图,如果你通过list1删除了一个球,球还在那里,只是list1不指向它了,但是list2还指向它。因为list1和list2不同。对list1删除元素,调换元素位置、添加元素、将某个元素指向另一个对象,清空列表,这些操作都不影响list2

还是第二个图,如果你通过list1把第一个球涂黑了,那么从list2访问,对应的球也是黑的,因为clone没有创造新的元素指向的对象。

Clone就是克隆,复制,是浅复制。clone就是把结构和数据复制了一份,所以list1的修改并不会影响到list2。

第二个问题回答过了。第一个问题强制转换其实也是编译期做的,所以不会。
如果有不明白的,可以追问,请勿重复发表相同的问题。

图片说明