LinkedList
- LinkedList 类扩展了 AbstractSequentialList 类并实现了 List 接口,方便元素添加、删除;
- LinkedList 提供了一个连接列表的数据结构;
- 在开发时,LinkedList集合也可以作为堆栈,队列的结构使用;
1. 构造方法
构造方法 | 说明 |
---|
LinkedList() | 建立一个空链接列表 |
LinkedList(Collection c) | 建立一个由 c 中元素初始化的连接列表 |
2. API
LinkedList 除了继承 List 接口的方法外,又提供了如下方法:
类型 | 方法 | 说明 |
---|
void | addFirst(Object o) | 将指定元素插入集合的开头 |
void | addLast(Object o) | 将指定元素插入集合的结尾 |
Object | getFirst() | 返回集合的第一个元素 |
Object | getLast() | 返回集合的最后一个元素 |
Object | removeFirst() | 移除并返回集合的第一个元素 |
Object | removeLast() | 移除并返回集合的最后一个元素 |
Object | pop() | 弹出链表的第一个元素 |
void | push(Object o) | 将元素推入链表第一的位置 |
boolean | isEmpty() | 如果链表不包含元素,返回 true |
3. 类的使用
- LinkedList 添加元素顺序和 add() 顺序有关;
- LinkedList 没有同步方法,多线程同时访问一个 List,必须自己实现访问同步(即线程不安全);
import java.util.Iterator;
import java.util.LinkedList;
public class test {
public static void main(String[] args) {
LinkedList ll = new LinkedList();
ll.add("apple");
ll.add("banana");
ll.addFirst("cat");
ll.addLast("dog");
Iterator it = ll.iterator();
while (it.hasNext()) {
System.out.print(it.next() + ", ");
}
System.out.println();
System.out.println(ll.getFirst());
System.out.println(ll.getLast());
System.out.println(ll.removeFirst());
System.out.println(ll.removeLast());
ll.add(1, "ball");
Object val = ll.get(2);
ll.set(2, (String) val + " Updated");
it = ll.iterator();
while (it.hasNext()) {
System.out.print(it.next() + ", ");
}
System.out.println(ll.pop());
System.out.println();
ll.push("push");
System.out.println(ll.isEmpty());
it = ll.iterator();
while (it.hasNext()) {
System.out.print(it.next() + ", ");
}
}
}
4. 源码分析
5. 与数组的比较
- 数组是连续的内存空间,查询快,添加和删除元素速度慢;
- 链表的元素是不连续存放的,上一个元素记录下一个元素的地址,增删快,查询慢;