介绍

java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。
Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不可重复;

Collection集合类关系图
集合 - 图1

ArrayList

java.util.ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。

特点分析:
查找快原因是因为这个连续的空间都具有下标,所以根据二分法的方式进行查找数据会非常的快,io损耗很少。
增删快的原因是因为,假设我要删除索引为0的数据的时候,需要把1-x的数据都往前移动一位。

构造方法
  1. public ArrayList(int initialCapacity) {
  2. if (initialCapacity > 0) {
  3. // 指定长度的object数组
  4. this.elementData = new Object[initialCapacity];
  5. } else if (initialCapacity == 0) {
  6. // 空数组
  7. this.elementData = EMPTY_ELEMENTDATA;
  8. } else {
  9. // 报错
  10. throw new IllegalArgumentException("Illegal Capacity: "+
  11. initialCapacity);
  12. }
  13. }
  14. // 空参构造,默认空容量
  15. public ArrayList() {
  16. this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
  17. }
  18. // 传入一个集合
  19. public ArrayList(Collection<? extends E> c) {
  20. Object[] a = c.toArray();
  21. if ((size = a.length) != 0) {
  22. if (c.getClass() == ArrayList.class) {
  23. elementData = a;
  24. } else {
  25. elementData = Arrays.copyOf(a, size, Object[].class);
  26. }
  27. } else {
  28. // replace with empty array.
  29. elementData = EMPTY_ELEMENTDATA;
  30. }
  31. }

add插入数据
  1. public boolean add(E e) {
  2. ensureCapacityInternal(size + 1); // Increments modCount!!
  3. elementData[size++] = e;
  4. return true;
  5. }
  6. public void add(int index, E element) {
  7. rangeCheckForAdd(index);
  8. ensureCapacityInternal(size + 1); // Increments modCount!!
  9. System.arraycopy(elementData, index, elementData, index + 1,
  10. size - index);
  11. elementData[index] = element;
  12. size++;
  13. }

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