介绍
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() |