代码如下:
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。
第二个问题回答过了。第一个问题强制转换其实也是编译期做的,所以不会。
如果有不明白的,可以追问,请勿重复发表相同的问题。