List
List接口特点:
1.集合是有序的(存储有序)
2.有索引,方便查找和修改
3.List集合可重复
4.可以存储null值
常用方法
1.添加功能
void add(int index, E element) 在指定 index 索引处理插入元素 element
boolean addAll(int index, Collection<? extends E> c) 在指定 index 索引处理插入集合元素 c
2.删除功能
void clear() 清空
E remove(int index) 删除指定索引 index 处的元素
3.修改功能
E set(int index, E element) 修改指定索引 index 处的元素为 element
4.遍历功能
E get(int index) + int size() for循环遍历集合中的每一个元素
ListIterator listIterator() 通过列表迭代器遍历集合中的每一个元素
ListIterator listIterator(int index) 通过列表迭代器从指定索引处开始正向或者逆向遍历集合中的元素
5.获取集合长度的功能
int size()
6.获取功能
E get(int index) 获取指定索引处的元素
int indexOf(Object o) 从左往右查找,获取指定元素在集合中的索引,如果元素不存在返回 -1
int lastIndexOf(Object o) 从右往左查找,获取指定元素在集合中的索引,如果元素不存在返回 -1
List subList(int fromIndex, int toIndex) 截取从 fromIndex 开始到 toIndex-1 处的元素
ArrayList
List
接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null
在内的所有元素。除了实现 List
接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。
ArrayList特点
- 底层数据结构是数组
- 增加和删除的效率低,查询和修改的效率高
- 能够存储 null 值
- 线程不安全,效率高 可以通过 Collections.synchronizedList();变安全
- 有索引,能够方便检索
- 元素可重复,我们自己可以通过 选择排序去重复
- 不可以排序,但是可以通过 Collections.sort();方法排序
Vector
Vector
类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector
的大小可以根据需要增大或缩小,以适应创建 Vector
后进行添加或移除项的操作。
Vector特点
- 底层数据结构是数组
- 有索引,能够方便检索
- 增加和删除的效率低,查询和修改的效率高
- 线程安全,效率低
- 能够存储 null 值
- 元素可重复
- 不可以排序,但是可以通过 Collections.sort();方法排序
常用方法
1.添加功能
public synchronized void addElement(E obj) 添加元素 obj 到集合中
public synchronized void insertElementAt(E obj, int index) 在指定索引 index 处插入元素 obj
2.删除功能
public synchronized void removeElementAt(int index) 移除指定索引 index 处的元素
public synchronized void removeAllElements() 移除所有元素
3.修改功能
public synchronized void setElementAt(E obj, int index) 修改指定索引 index 的元素为 obj
4.遍历功能
public synchronized E elementAt(int index) + size() for循环遍历集合中的所有元素
public synchronized Enumeration elements() 使用 Enumeration 迭代器遍历集合中的元素
5.获取功能
public synchronized E firstElement() 获取集合中的第一个元素
public synchronized E lastElement() 获取集合中的最后一个元素
public synchronized E elementAt(int index) 获取指定索引 index 的元素
Stack
Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search方法。
特点
- 基于栈结构的集合,先进后出
- Stack 类是 Vector类的子类,所以该类也是线程安全的,效率低。
常用方法
E push(E item) 将元素压入栈底
E pop() 将元素从栈结构中弹出,并作为此函数的值返回该对象,此方法会影响栈结构的大小
E peek() 查看堆栈顶部的对象,但不从栈中移除它。
boolean empty() 测试栈是否为空。
int search(Object o) 返回对象在栈中的位置,以 1 为基数。
Queue
特点
- 该接口是队列接口的根接口,先进先出
- 该接口提供队列相关两种形式的方法,一种抛出异常(操作失败时),另一种返回一个特殊值(
null
或
false
,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的Queue
实现设计的;在大多数实现中,插入操作不会失败。
常用方法
Deque
Deque特点
- Deque是一个Queue的子接口,是一个双端队列,支持在两端插入和移除元素
- deque支持索引值直接存取。
- Deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费时。
- 插入、删除、获取操作支持两种形式:快速失败和返回null或true/false
- 不推荐插入null元素,null作为特定返回值表示队列为空