一.List集合
1.集合框架(简介、Collection方法、迭代器)
2.集合框架List(ArrayList特有方法、特有迭代器、具体对象特点、增长因子论证)
3.集合框架Vector
4.集合框架LinkedList
5.集合框架ArrayList中的重复元素去重及其底层原理
二.ArrayList
既然要介绍ArrayList,那么就顺带一起介绍Vector。因为二者的用法功能非常相似,可以一起了解比对。
- 简介
ArrayList和Vector作为List类的两个典型实现,完全支持之前介绍的List接口的全部功能。
ArrayList和Vector类都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的、允许再分配的Object[]数组。ArrayList或Vector对象使用initalCapacity参数来设置该数组的长度,当向ArrayList或Vector中添加元素超过了该数组的长度时,它们的initalCapacity会自动增加。下面我们通过阅读JDK 1.8 ArrayList源码来了解这些内容。
- ArrayList 本质
当以List list = new ArrayList(3);方式创建ArrayList集合时,
三.集合框架Vector
四. LinkedList
- 简介
LinkedList类是List接口的实现类——这意味着它是一个List集合,可以根据索引来随机访问集合中的元素。除此之外,LinkedList还实现了Deque接口,可以被当作成双端队列来使用,因此既可以被当成“栈”来使用,也可以当成队列来使用。
LinkedList的实现机制与ArrayList完全不同。
- ArrayList内部是以数组的形式来保存集合中的元素的,因此随机访问集合元素时有较好的性能;
- 而LinkedList内部以链表的形式来保存集合中的元素,因此随机访问集合元素时性能较差,但在插入、删除元素时性能比较出色。
由于LinkedList双端队列的特性,所以新增了一些方法。
-
方法
方法 描述
void addFirst(E e) 将指定元素插入此列表的开头。
void addLast(E e) 将指定元素添加到此列表的结尾。
E getFirst(E e) 返回此列表的第一个元素。
E getLast(E e) 返回此列表的最后一个元素。
boolean offerFirst(E e) 在此列表的开头插入指定的元素。
boolean offerLast(E e) 在此列表末尾插入指定的元素。
E peekFirst(E e) 获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。
E peekLast(E e) 获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。
E pollFirst(E e) 获取并移除此列表的第一个元素;如果此列表为空,则返回 null。
E pollLast(E e) 获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。
E removeFirst(E e) 移除并返回此列表的第一个元素。
boolean removeFirstOccurrence(Objcet o) 从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表时)。
E removeLast(E e) 移除并返回此列表的最后一个元素。
boolean removeLastOccurrence(Objcet o) 从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表时)。
下面我们就以阅读源码的方式来了解LinkedList内部是怎样维护链表的。 -
LinkedList本质
LinkedList调用默认构造函数,创建一个链表。由于维护了一个表头,表尾的Node对象的变量。可以进行后续的添加元素到链表中的操作,以及其他删除,插入等操作。也因此实现了双向队列的功能,即可向表头加入元素,也可以向表尾加入元素