介绍
java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。
Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不可重复;
Collection集合类关系图
ArrayList
java.util.ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。
特点分析:
查找快原因是因为这个连续的空间都具有下标,所以根据二分法的方式进行查找数据会非常的快,io损耗很少。
增删快的原因是因为,假设我要删除索引为0的数据的时候,需要把1-x的数据都往前移动一位。
构造方法
public ArrayList(int initialCapacity) {if (initialCapacity > 0) {// 指定长度的object数组this.elementData = new Object[initialCapacity];} else if (initialCapacity == 0) {// 空数组this.elementData = EMPTY_ELEMENTDATA;} else {// 报错throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);}}// 空参构造,默认空容量public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}// 传入一个集合public ArrayList(Collection<? extends E> c) {Object[] a = c.toArray();if ((size = a.length) != 0) {if (c.getClass() == ArrayList.class) {elementData = a;} else {elementData = Arrays.copyOf(a, size, Object[].class);}} else {// replace with empty array.elementData = EMPTY_ELEMENTDATA;}}
add插入数据
public boolean add(E e) {ensureCapacityInternal(size + 1); // Increments modCount!!elementData[size++] = e;return true;}public void add(int index, E element) {rangeCheckForAdd(index);ensureCapacityInternal(size + 1); // Increments modCount!!System.arraycopy(elementData, index, elementData, index + 1,size - index);elementData[index] = element;size++;}
Vector
和ArrayList用法一致。
| 元素超过它的初始大小 | 线程安全 | 效率 | |
|---|---|---|---|
| ArrayList | *150% | × | 高 |
| Vector | *200% | √ | 低 |
Vector是一个比较老的类,在JDK 1.0即已出现,不推荐使用(蓝桥杯的练习题中出现过Vector,在那道题中只要知道它的用法和ArrayList一样就行)。
虽然Vector是线程安全的,但是在线程安全方面也不推荐使用。推荐方案如下:List<String> synList = Collections.synchronizedList(list);
LinkedList
java.util.LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。
| 特色方法 | 解释 |
|---|---|
| addFirst() | 头部添加 |
| addLast() | 尾部添加 |
| removeFirst() | 头部删除 |
| removeLast() | 尾部删除 |
| push() | 入栈,等效于addFirst() |
| pop() | 出栈,等效于removeFirst() |
| offer() | 入队列,等效于addLast() |
| poll() | 出队列,等效于removeFirst() |
