List本身是Collection接口的子接口,具备了Collection的所有方法.
List的特有方法都有索引,这是该集合最大的特点.
List:有序,元素都有索引,并可以重复。
ArrayList:底层数据结构是数组,线程不同步,查询元素速度快,增删慢.
LinkedList:底层数据结构是链表,线程不同步,增删元素的速度快,查询慢.
Vector:底层数据结构是数组,线程同步,查询慢,增删慢.所以ArrayList已经替代了Vector .
1. 添加功能
add(index,element) 在指定的索引位插入元素.
addAll(index,collection) 在指定的索引位插入一堆元素.
2. 删除功能
remove(index) 删除指定索引位的元素. 返回被删的元素.
3. 获取功能
Object get(index) 通过索引获取指定元素
int indexOf(obj) 获取指定元素第一次出现的索引位,如果该元素不存在 返回-1 ; 所以, 通过-1, 可以判断一个元素是否存在.
int lastIndexOf(Object o) 反向索引指定元素的位置.
List subList(start,end) 获取子列表.
4. 修改功能
Object set(index,element) 对指定索引位进行元素的修改.
5. 获取所有元素
ListIterator listIterator() list集合特有的迭代器.
List集合支持对元素的 增、删、改、查
ListIterator ------ List集合特有的迭代器
|
| add(E e) 将指定的元素插入列表(可选操作)。 |
| hasNext() 以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。 |
| hasPrevious() 如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。 |
| |
| nextIndex() 返回对 next 的后续调用所返回元素的索引。 |
| |
| previousIndex() 返回对 previous 的后续调用所返回元素的索引。 |
| remove() 从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。 |
| set(E e) 用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。 |
可变长度数组的原理:
当元素超出数组长度,会产生一个新数组,将原数组的数据复制到新数组中,再将新的元素添加到新数组中。
ArrayList:是按照原数组的50%延长。构造一个初始容量为 10 的空列表。
Vector:是按照原数组的100%延长。
注意:
对于list集合,底层判断元素是否相同,其实用的是元素自身的equals方法完成的. 所以建议元素都要复写equals方法,建立元素对象自己的比较相同的条件依据.
LinkedList :
特有方法:
addFirst();
addLast();
在jdk1.6以后 .
offerFirst();
offerLast();
getFirst() 获取链表中的第一个元素. 如果链表为空, 抛出NoSuchElementException;
getLast();
在jdk1.6以后 .
peekFirst(); 获取链表中的第一个元素. 如果链表为空, 返回null .
peekLast();
removeFirst() 获取链表中的第一个元素, 但是会删除链表中的第一个元素. 如果链表为空, 抛出NoSuchElementException
removeLast();
在jdk1.6以后 .
pollFirst(); 获取链表中的第一个元素, 但是会删除链表中的第一个元素. 如果链表为空, 返回null .
pollLast();