LinkedList
LinkedList 类扩展了 AbstractSequentialList 类并实现了 List 接口;
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() | 移除并返回集合的最后一个元素 |
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() + ", ");
}
}
}
//输出:
//cat, apple, banana, dog,
//cat
//dog
//cat
//dog
//apple, ball, banana Updated,
4. 与数组的比较
- 数组是连续的内存空间,查询快,添加和删除元素速度慢;
- 链表的元素是不连续存放的,上一个元素记录下一个元素的地址,增删快,查询慢;