ArrayList
  1. 默认初始容量为10。添加第一个元素后,初始化容量10

  2. 集合底层是一个Object[]数组

  3. 构造方法

    new ArrayList();

    new ArrayList(20);

  4. ArrayList集合的扩容:

    原容量的1.5倍

    怎么优化?

    ​ 尽可能少地扩容。因为数组扩容效率比较低,使用ArrayList集合的

    ​ 时候预估计元素的个数,给定一个初始化容量。

  5. 数组有点:

    1. 检索效率比较高。(每个元素占用空间大小相同,内存地址连续;知道首元素内存地址,知道下标,可以通过数学表达式计算出元素的内存地址,所以检索效率最高。)
  6. 数组缺点:

    1. 随机增删元素效率比较低
  7. 向数组末尾添加元素,效率很高,不受影响。

  8. 面试常问:

    1. 这么多集合中,用的哪个集合最多?

      ArrayList集合。因为数组末尾添加元素,效率不受影响。

      另外,检索/查找某个元素的操作比较多

单向链表

内存结构

Day09_初始化

双向链表

Day09_内存地址_02

Vector
import java.util.*;

/*
Vector:
    1、底层也是一个数组。
    2、初始化容量:10。
    3、扩容之后是原容量的2倍。
        10-->20-->40-->80
    4、ArrayList集合扩容是原容量的1.5倍。
    5、Vector中所有的方法都是线程同步的,都带有synchronized关键字
       是线程安全的。效率较低,使用较少了。

    6、将线程不安全的ArrayList集合转换成线程安全的
        使用集合工具类:
        java.util.Collections

        java.util.Collection 是集合接口。
        java.util.Collections 是集合工具类。

 */
public class VectorTest {
    public static void main(String[] args) {
        // 创建vector类
        Vector vector = new Vector();

        // 添加元素
        vector.add(0);
        vector.add(1);
        vector.add(2);
        vector.add(3);
        vector.add(4);

        //遍历
        Iterator iterator = vector.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            System.out.println(obj);
        }

        // 可能要用!
        List list = new ArrayList();// 非线程安全的
        //变成线程安全的
        Collections.synchronizedList(list);
    }
}