arraylist 的扩容机制_ArrayList、LinkedList、Vector看完你不懂,算是输!
时间: 2024-02-29 17:57:07 浏览: 37
ArrayList 是基于数组实现的,当数组容量不足时,需要扩容。它的扩容机制是每次扩容增加当前容量的一半,即 newCapacity = oldCapacity + (oldCapacity >> 1)。
LinkedList 是基于链表实现的,不需要扩容。它的添加和删除操作比 ArrayList 更高效,因为它不需要移动元素,但是随机访问元素的性能比 ArrayList 差。
Vector 是线程安全的 ArrayList,它的扩容机制和 ArrayList 相同。但是由于线程安全的开销,它的性能比 ArrayList 差。因此,在单线程环境下,应该使用 ArrayList 而不是 Vector。
相关问题
arraylist linkedlist vector 初始空间,怎么扩容
`ArrayList`、`LinkedList` 和 `Vector` 都是常见的基于数组和链表实现的动态数组。它们在创建时都需要指定初始容量,以便为元素存储分配足够的内存空间。如果在添加更多元素时,容量不足,它们会自动扩容。
以下是每个类的初始容量和扩容策略:
- `ArrayList` 的初始容量为 10,每次扩容会增加 50% 的容量。例如,如果当前容量为 10,将添加第 11 个元素时,它将会扩容到 15。当容量不足时,它将创建一个新的数组,将旧数组中的元素复制到新数组中,并将新元素添加到新数组中。
- `LinkedList` 不需要初始容量,因为它是通过链接节点实现的,每个节点都会分配其自己的内存空间。它的扩容策略是在需要时分配更多的内存空间。
- `Vector` 的初始容量为 10,每次扩容会增加一倍的容量。例如,如果当前容量为 10,将添加第 11 个元素时,它将会扩容到 20。当容量不足时,它将创建一个新的数组,将旧数组中的元素复制到新数组中,并将新元素添加到新数组中。
需要注意的是,当这些类动态扩容时,会涉及到数组复制和元素移动操作,这可能会导致性能下降。因此,在创建时尽量估计元素数量,以减少扩容的次数。
arraylist linkedlist vector区别
ArrayList、LinkedList和Vector都是List的实现类,它们之间有以下不同点:
1. 线程安全性:Vector是线程安全的,而ArrayList和LinkedList不是。因此,在多线程环境下,Vector比ArrayList和LinkedList更可靠。
2. 效率:ArrayList在随机访问时效率很高,因为它在内存中是连续存储的。而LinkedList在插入和删除时效率很高,因为它不需要移动元素。
3. 数据增长:ArrayList和Vector在数据增长时都需要扩容,而LinkedList不需要。当需要频繁地在列表中插入或删除元素时,LinkedList比ArrayList和Vector更适合。
4. 迭代器:LinkedList提供了更快速的迭代器,因为它的元素在内存中是不连续的。而ArrayList和Vector的迭代器速度相对较慢。
综上所述,如果需要线程安全的List,可以使用Vector,如果需要随机访问元素的高效率,可以使用ArrayList,如果需要频繁地在列表中插入或删除元素,可以使用LinkedList。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)