# List实现有哪些

1. **ArrayList**:
2. **LinkedList**:	
3. **Vector**:
4. **Stack**:
5. **CopyOnWriteArrayList**:
6. **Arrays.asList()**:

### ArrayList和LinkedList区别？
1. **内部实现**:
    - ArrayList基于动态数组实现，通过数组存储元素，支持随机访问。
    - LinkedList基于双向链表实现，每个节点包含对前一个和后一个节点的引用。
2. **随机访问**:
    - ArrayList支持高效的随机访问，因为可以根据索引直接访问数组中的元素。
    - LinkedList的随机访问效率较低，需要从头或尾部开始遍历链表，直到找到目标位置。
3. **空间占用**:
    - ArrayList在添加元素时，可能需要重新分配内部数组的大小，会导致空间浪费。
    - LinkedList每个节点都需要额外的空间存储前后节点的引用，可能会占用更多的内存。
4. **迭代性能**:
    - ArrayList通过迭代器（Iterator）进行迭代操作效率较高。
    - LinkedList在迭代操作时，由于需要遍历链表中的每个节点，性能相对较低。
+ **查找**: ArrayList更快（O(1) vs O(n)）。
+ **插入**: 如果是在末尾插入，ArrayList更快；如果在中间或开头插入，LinkedList更快（O(1) vs O(n)）。

