向量,历史比较悠久,Java诞生就有了,特点与ArrayList相同, 不同的是Vector操作元素的方法是同步的,同一时刻只能有一个线程访问,没有特殊需求都使用ArrayList 构造方法 public Vector() public Vector(int initialCapacity) public Vector(int initialCapacity,int capacityIncrement) 第一个参数是初始容量,第二个参数是当Vector满时的增量 public Vector(Collection c) Vector也是依赖数组实现的
Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因 为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用 Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。
<color red>ArrayList底层采用数组实现,LinkedList底层采用双链表实现</color> LinkedList底层Entry结构 Entry{ Entry previous; Object element; Entry next; } 插入和删除操作时,采用LinkedList好,搜索时,采用ArrayList好
CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。
缺点:(1)内存消耗大(2)只能保证数据的最终一致性,不能保证数据的实时一致性