list是一个接口,实现类:Arraylist,Vector,Linkedlist
list接口(有序):
常用方法
排除Collection中具有的之外的
添加功能
void add(int index, E element):在指定位置添加元素
boolean addAll(int index, Collection<? extends E> c):在指定位置添加一组元素
判断功能
int indexOf(Object o):查找某个元素所在位置
int lastIndexOf(Object o):元素最后一次出现位置。
获取功能
E get(int index):根据下标获取元素
int size():返回集合的元素个数
List<E> subList(int fromIndex, int toIndex):根据下标获取指定返回内的元素,返回一个新的集合
修改功能
E set(int index, E element):修改某个位置的元素,返回被修改元素。
E remove(int index):根据索引删除元素,返回被删除的元素。
特定迭代器
ListIterator<E> listIterator():获取列表迭代器,开始位置0
ListIterator<E> listIterator(int index):获取从指定位置开始的迭代器
ListIterator
List集合特有的迭代器,在Iterator的基础上进行了增强,可以获取上一个元素,提供了以下方法:
boolean hasPrevious():是否有上一个元素
E previous():获取上一个元素
void add(E e):添加元素
void set(E e):用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)
void remove():从列表中移除由 next 或 previous 返回的最后一个元素(可选操作),而Iterator中只能替删除next()元素
int nextIndex():返回对 next 的后续调用所返回元素的索引。
int previousIndex():返回对 previous 的后续调用所返回元素的索引。
List的遍历
方法一:配合size()函数和get(index)函数使用for循环遍历
方法二:使用iterator迭代器遍历
方法三:使用ListIterator遍历。
ArrayList:
特点:
1:大小可变
2:底层实现是数组,默认容量为10
3:扩容方式:原始容量+原始容量的一半
4:new ArrayList<>()的时候容量为0,第一次添加(add)之后容量为默认容量,最开始的时候存放数据的数组为{ }
5:线程不安全,读写块,插入或者删除效率低
6:迭代器是快速失败的
Vector:
特点:
1:大小可变
2:底层实现是数组,默认容量为10
3:扩容方式:原始容量的2倍(如果使用public Vector(int initialCapacity, int capacityIncrement)来构造Vector,扩容方式为当前容量+capacityIncrement。new Vector<>()的时候就变为默认容量)
4:线程安全,读写快,插入,删除效率低
5:由于效率低下,很少被使用,如果需要使用线程安全的数组,可以使用Vector来代替
6:迭代器是快速失败的
LinkedList:
特点:
1:底层是双向链表
2:线程不安全
3:查询效率低,随机插入和删除快