一、特征
1.底层实现是node节点,数据结构是双向链表,也可以作为队列(先进先出),栈(先进后出)
2.没有扩容概念
3.有序的、不唯一、可为null、有索引
4.查找较慢、插入删除较快
5.线程不同步的、多线程不安全的
如果要同步的LinkedList
List list = Collections.synchronizedList(new LinkedList(…));
二、常用方法
- List接口的方法(索引的操作)
add() \ get() \ remove() \ set()
size() \ clear() \ contains() \ isEmpty()
indexOf() \ lastIndexOf()
- Deque接口的方法(首尾元素的操作)
addFirst(E e) 将指定元素插入此列表的开头
addLast() 将指定元素插入到此列表的结尾
getFirst() 返回此列表的第一个元素
getLast() 返回此列表的最后一个元素
removeFirst() 移除并返回此列表的第一个元素
removeLast() 移除并返回此列表的最后一个元素
offer(E e) 将指定的元素添加到此列表的末尾(最后一个元素)
offerFirst(E e) 在此列表的开头插入指定的元素
offerLast(E e) 在此列表的结尾插入指定的元素
peek() 获取但不移除此列表的头(第一个元素)
peekFirst() 获取但不移除此列表的第一个元素;如果此列表为空,则返回null;
peekLast() 获取但不移除此列表的最后一个元素;如果此列表为空,则返回null;
poll() 获取并移除此列表的头(第一个元素)
pollFirst() 获取并移除此列表的第一个元素;如果此列表为空,则返回null;
pollLast() 获取并移除此列表的最后一个元素;如果此列表为空,则返回null;
push(E e) 将元素推入此列表所表示的堆栈
pop() 从此列表所表示的堆栈处弹出一个元素
三、测试代码
public class Demo01LinkedList {
@Test
public void test1(){
LinkedList<String> list = new LinkedList<>();
list.add("Tom");
list.add("Han");
list.addFirst("hello");
list.addLast("world");
System.out.println(list);
String first = list.getFirst();
String last = list.getLast();
String remove = list.remove();
System.out.println(first + "," + last + "," + remove);
}
@Test
public void test2(){
Deque<String> list = new LinkedList<>();
list.add("java");
list.add("python");
list.addFirst("hello");
list.add("world");
System.out.println(list);
System.out.println(list.getFirst());
System.out.println(list.getLast());
System.out.println(list.removeFirst());
System.out.println(list);
}
@Test
public void test03(){
Deque<String> list = new LinkedList<>();
list.add("java");
list.add("hello");
list.add("world");
list.offer("python");
list.offerFirst("kotlin");
list.offerLast("golang");
System.out.println(list);
System.out.println(list.peek());// 获取不删除
System.out.println(list.peekFirst());
System.out.println(list.peekLast());
System.out.println(list);
System.out.println(list.poll()); // 获取并删除
System.out.println(list);
}
@Test
public void test04(){
Deque<String> list = new LinkedList<>();
list.push("hello");
list.push("world");
list.push("java");
list.push("python");
System.out.println(list);
System.out.println(list.pop());
System.out.println(list);
}
}