一、接口Collection是Java集合类的根接口,作为一个存储容器,用于存储一组对象。主要有两个继承分支,List 以及 Set。
常用的接口方法有:
1、int size();
2、 boolean isEmpty();
3、 boolean contains(Object o);
4、 Iterator<E> iterator();//Collection 接口继承自Iterable,可以作为迭代器的迭代对象
5、 Object[] toArray();
6、 <T> T[] toArray(T[] a);
7、 boolean add(E e);
8、 boolean remove(Object o);
9、 boolean addAll(Collection<? extends E> c);
10、 void clear();
二、List接口
1、接口List是有序的Collection,能够通过索引快速查找到元素。List允许有相同的元素。
2、ArrayList 数组list,底层实现是基于数组的List实现方式。如下图,
Arraylist不是线程安全的,因为是基于数组的实现方式,根据下标查找,遍历的速度快。
添加移除的时候 会涉及到元素的移动,效率会降低
添加元素时,当超过容量时,需要对数组进行扩容,带来效率上的损耗。
2、LinkedList 基于链表的List的实现,这个容器类也不是线程安全的。链表的好处就是增删的效率高,遍历的效率低。因为遍历会从链头开始遍历。
只需要简单的操作节点的左右节点就能快速的增加删除元素
如果是使用LinkedList作为查找,遍历的对象将是痛苦的。需要从头开始遍历。
对比ArrayList,LinkedList,ArrayList,LinkedList适合在非多线程情况下,否则会带来多线程的问题。Arraylist可以快速的进行元素的下标获取元素,LinkedList可以进行快速的元素删除,添加操作。
3、Vector
Vector类似于Arraylist类,Vector是同步的,当在迭代获取Vector的元素时,此时对这个Vector添加元素将会报错。注意这个异常的处理。
4、Stack类
继承自Vector,实现先进后出的栈容器,基本方法有push() 、pop()、 peak()
二、Set接口
Set接口是不能包含重复元速度的Collection(集合),Set集合最多有一个null元素。