List和Deque

胡泽宇 2020年02月12日 51次浏览

List集合

元素可以重复
元素有序。按添加顺序排列,第一个添加的元素索引为0

Set集合支持的方法,List集合完全都支持。

List新增方法:

由于List的集合元素是有索引的,因此程序可通过下表去添加/删除/获取/替换指定位置的元素。

void add(int index, E element) 在指定位置插入指定元素在这个列表
E set(int index, E element) 取代在指定位置上的元素在这个列表指定的元素
E remove(int index) 这个列表中删除指定位置的元素
int indexOf(Object o) 返回第一次出现的指定元素的索引列表
List<E> subList(int fromIndex, int toIndex) 获取子集合[fromIndex,toIndex)

实例:
1

ArrayList

List集合的最常用的实现:基于数组的实现,因此性能非常好

和HashSet一样,可以在构造器里指定底层数组的长度,如果不指定默认长度是10。
当底层数组快满时,数组会扩大到原来的1.5倍。

Vector(过时)

2
官方API中的一段话。
Vector现在基本上用不到,被ArrayList代替。
特点:

线程安全,但性能差。

LinkedList

它是基于链表实现的。
访问元素时,需要逐个比较,因此性能较差。
方法是最多的。List支持的方法,Deque支持的方法它都支持,但是就是性能较差。

Deque接口

ArrayDeque

代表双端队列,即是栈,也是队列。
ArrayDeque也是基于数组实现,性能非常好。

主要作为2个场景:

    • push(元素); 入栈
    • pop(); 弹出
    • peek(); 获取最上面的元素,并不弹出。
  1. 队列
    • offer(元素); 入队
    • poll(); 出队
    • peek(); 获取队头的元素,并不出队。
当ArrayDeque用于栈时:

3

当ArrayDeque用于队列时:

4
补充一下:队头是最先入队的,栈顶是最后入栈的。

Stack(过时)

已经被ArrayDeque代替

特点:
线程安全,但性能差。