# Vector

![image-20220303165948811](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-0a35ea1088e7963b6ec49eca4c96b165fb7f4efb%2Fimage-20220303165948811.png?alt=media)

![image-20220303165926090](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-071bfe9b63e4a6f40f38fe5f27340b8a85d8d297%2Fimage-20220303165926090.png?alt=media)

1. 和ArrayList相同，内部也是采用连续结构`Object[]`存储数据，且该数组是一个容器，有`size`字段记录长度：

   ![image-20220303170121030](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-072d0064f338afee3449a0a2c352b0a2a07b5bd1%2Fimage-20220303170121030.png?alt=media)
2. 创建Vector，会默认分配10的容量：

   ![image-20220303170222750](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-356b78253adf1f9d86d22c8a0e0d91f00ea51870%2Fimage-20220303170222750.png?alt=media)
3. 与ArrayList不同，add方法变为线程安全的，但在添加元素时，同ArrayList一样有可能发生扩容：

   ![image-20220303170306610](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-4265091075a9005f3aad57b68e1fc639270dd4e4%2Fimage-20220303170306610.png?alt=media)
4. 其中扩容的规则如下，不同于ArrayList，采用2倍扩容

   ![image-20220303170425613](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-e565e0c3d82b22293a9d39339777bb4523b73a83%2Fimage-20220303170425613.png?alt=media)

总结：

1. `ArrayList`是非线程安全的，`Vector`是线程安全的，他的方法有`synchronized`，所以`Vector`效率较低
2. `ArrayList`扩容的倍数为`1.5`，`Vector`则是`2`
3. `Vector` 已经被淘汰了
