// size()用于返回集合元素个数
// 即 return size;
linkedList.size();
// toArray()用于将集合转为Object[]数组
// 内部实现:
// 1.先创建一个长度为size的Object[]数组
// 2.遍历LinkedList底层链表的节点,并取出节点的item存入数组中
linkedList.toArray();
// toAarry(T[] a)用于将集合转成T[]数组
// 当形参a数组的长度小于size时,创建一个T[]类型的长度为size的新数组
// 当形参a数组的长度大于size时,则将大于size部分的索引元素设为null
// 遍历链表,将集合元素存入数组0~size-1索引中。
linkedList.toArray(new Object[0]);
}
public static void testMethodFromObject(){
LinkedList linkedList = new LinkedList();
Person p1 = new Person(“qfc”,18);
Person p2 = new Person(“zyx”,19);
Person p3 = new Person(“swk”,20);
Person p4 = new Person(“zbj”,21);
Collections.addAll(linkedList,p1,p2,p3,p4);
System.out.println(linkedList.get(0));
/**
-
由于LinkedList实现了Cloneable接口,且重写clone方法,在clone方法中调用了super.clone(),获得对象拷贝
-
后面将拷贝对象的first,last设为null,将size,modCount设为null
-
然后遍历被拷贝对象的节点,将节点中的item取出,通过cloneObject.add(item);给克隆对象插入对应元素
-
为什么不直接使用super.clone()结果呢?因为这样会导致 拷贝对象的first,last 和 被拷贝对象的first,last 指向同一个内存上节点,这实际上已经不算对象克隆了。
*/
LinkedList clone = (LinkedList)linkedList.clone();
Person person = (Person) clone.get(0);
person.setName(“sg”);
person.setAge(12);
System.out.println(linkedList.get(0));
/**
- 说明:LinkedList的对象克隆是浅克隆
*/
}
public static void testMethodFromDeque(){
LinkedList linkedList = new LinkedList©;
System.out.println(linkedList);
//下面几个方法都是见名知意的
linkedList.addFirst(“A-”);//[A-,A, B, C, D]
linkedList.addLast(“Z”);//[A-,A, B, C, D, Z]
linkedList.removeFirst();//[A, B, C, D, Z]
linkedList.removeLast();//[A, B, C, D]
linkedList.removeFirstOccurrence(“A”);//[B, C, D]
linkedList.removeLastOccurrence(“B”);//[C, D]
//下面几个方法是模拟顺序栈的操作
linkedList.push(“A-”);//[A-,C, D]
linkedList.peek();//[A-,C, D]
linkedList.pop();//[C, D]
System.out.println(linkedList);//[C, D]
//下面几个方法是模拟双向栈的操作
//注意offer()是栈底压栈
linkedList.offer(“A–”);//[C, D, A–]
linkedList.offerFirst(“A-”);//[A-, C, D, A–]
linkedList.offerLast(“Z”);//[A-, C, D, A–, Z]
linkedList.peekFirst();//[A-, C, D, A–, Z]
linkedList.peekLast();//[A-, C, D, A–, Z]
linkedList.poll();//[C, D, A–, Z]
linkedList.pollFirst();//[D, A–, Z]
linkedList.pollLast();//[D, A–]
System.out.println(linkedList);
//取出栈顶元素
Object element = linkedList.element();//D
System.out.println(element);
}
public static void testIterator(){
LinkedList linkedList = new LinkedList©;
// iterator()本质是调用的LinkedList的listIterator(0);
// 所以该方法本质是返回一个ListIterator对象
Iterator iterator = linkedList.iterator();
ListIterator listIterator = (ListIterator) iterator;
boolean hasPrevious = listIterator.hasPrevious();
System.out.println(hasPrevious);//由于该迭代器本质是listIterator(0),所以next为node(0),所以nextIndex=0,而hasPreviou