【JAVA SE基础篇】41.Collection、List方法和ArrayList、LinkedList、Vector底层实现
1.Collection中的方法
Collection表示一组对象,他是集中、收集的意思。Collection接口有两个子接口List和Set接口
Cooleantion中的方法:
1.boolean add(Object element):增加元素到容器
2.boolean remove(Object element):从容其中删除元素
3.boolean contains(Object element):容器中是否包含该元素
4.int size():容器中元素的数量
5.boolean isEmpty():容器是否为空
6.void clear():清空容器中所有元素
7.Iterator iterator():获得迭代器,用于遍历所有元素
8.boolean containsAll(Collection c):本容器是否包含C容器中的所有元素
9.boolean addAll(Collection c):将容器C中所有元素增加到本容器
10.boolean remove(Collection c):移除本容器和容器C中都包含的元素
11.boolean retainAll(Collection c):取本容器和容器C中都包含的元素,移除非交集元素
12.Object[] toArray() :转化成Object数组
例(基本方法):
例(数学集合相关的方法):
2.List
List是有序、可重复的容器。
有序:List中的每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素。
可重复:List允许加入重复的元素。更确切地讲,List通常允许满足e1.equals(e2)的元素重复加入容器
List接口常用的实现类有3个:ArrayList、LinkedList和Vector。
List除了可以使用Collection接口的方法,List多了一些跟顺序(索引)相关的方法:
1.void add(int index,Object element):在指定位置插入元素,以前的元素全部后移
2.Object set(int index,Object element):修改指定位置的元素
3.Object get(int index):返回指定位置的元素
4.Object remove(int index):删除指定位置的元素,后面元素全部前移一位
5.int indexOf(Object o):返回第一个匹配元素的索引,如果没有该元素,返回-1
6.int lastIndexOf(Object o):返回最后一个匹配的元素的索引,如果没有该元素,返回-1
例:
3.ArrayList的底层实现
ArrayList底层是用数组实现的存储,特点:查询效率高,增删改效率低,线程不安全(Vevtor安全),比较常用。
数组长度有限,而ArrayList是可以存放任意数量的对象,长度不受限制,是怎么实现的呢?
使用数组的扩容。当数组长度不够了,默认定义一个原先的数组1/2大小的数组(10变成15)。再将原数组内容拷贝至新数组,无限循环。
4.LinkedList的底层实现
LinkedList底层是双向链表实现存储的。特点:查询效率低,增删改效率高,线程不安全。
双向链表也叫双链表,是链表的一种,他的每个数据节点都有两个指针,分别指向前一个节点和后一个节点。
所以,从双向链表中的中的任意节点开始,都可以很方便的找到所有节点
5.Vector的底层实现
Vector的底层实现还是数组,相关的方法都加入同步检查,因此线程安全,效率低。
比如indexOf方法就加入了synchronized同步标记
public synchronized int indexOf (Object o,int index){
//略
}
6.如何选用ArrayList、LinkedList、Vector?
1.需要线程安全时,使用Vector。
2.不存在线程安全时,并在查找时多用ArrayList(常用)
3.不存在线程安全时,增加和删除元素多用LinkedList。