概述
(1)LinkedList是List的一个链表实现
(2)是个线性表
(3)底层维护了一个双向链表
(4)允许null,允许重复,有序
(5)线程不安全
(6)不仅仅是List子实现(主要),也是Deque接口的实现(次要)
(7)不仅仅可以作为普通的线性表,它还可以充当 普通队列、双端队列、栈
(不仅有Deque中的方法,还有Queue(Deque的父接口)中的方法)
构造方法
DemoLinkedList 3
API
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
transient int size = 0;
transient Node<E> first;
transient Node<E> last;
DemoLinkedList 1
LinkedList的特点
DemoLinkedList 2
LinkedList充当普通队列、双端队列、栈
DemoLinkedList 3
构造方法
DemoLinkedList 4
返回浅表副本:存的是String的情况
Object clone() 返回此 LinkedList 的浅表副本
存的是String:常量池中,删除的只是引用,互不影响
存的是对象(如User):删除的是自己的引用,修改的话会影响
System.out.println(clone); //[zs, ls, wu, zl, zs, ls, wu, zl]
clone.remove("zs");
System.out.println(clone); //[ls, wu, zl, zs, ls, wu, zl]
System.out.println(list); //不会改变
DemoLinkedList 5
返回浅表副本():存的是对象的情况
LinkedList<User> list2 = (LinkedList<User>) list.clone();
System.out.println(list2); //User{name='zs', age=19}
// list2.remove(zs);
User user = list2.get(0);
user.name = "aa";
System.out.println(list2); //User{name='aa', age=19}
System.out.println(list); //User{name='aa', age=19}
DemoLinkedList 6
迭代器
Iterator<String> iterator1 = list.iterator();
ListIterator<String> iterator = list.listIterator(list.size() - 1);
ListIterator<E> listIterator(int index) 返回此列表中的元素的列表迭代器(按适当顺序),从列表中指定位置开始
Iterator<String> iterator = list.descendingIterator();
Iterator<E> descendingIterator() 接口 Deque<E>中的 返回以逆向顺序在此双端队列的元素上进行迭代的迭代器