常见的面试问题之一是“ArrayList 和 Vector 有什么区别”。在我们真正看到区别之前,让我先简单介绍一下两者。
数组列表
-
ArrayList 是列表接口的实现。
-
ArrayList 未同步(因此不是线程安全的)
-
ArrayList 是使用数组作为内部数据结构实现的,可以动态调整大小。
-
当 ArrayList 的大小增加时,它的大小会增加一半。
向量
-
Vector 是列表接口的实现。
-
向量是同步的(所以线程安全)
-
Vector是使用数组作为内部数据结构实现的。它可以动态调整大小。
-
当向量的大小增加时,数组的大小会加倍。
ArrayList 与向量:
Parameter |
Vector |
ArrayList |
Synchonized |
Yes |
No |
ThreadSafe |
Yes |
No |
Performance |
It is slower than arraylist |
It is faster than Vector |
Changes in internal size of array when resized |
Vector doubles size of its internal array when its size is increased |
ArrayList increases half of its size when its size is increased. |
哪个更好?数组列表还是向量?
这实际上取决于我们的需要。Vector 比 ArrayList 慢,因为它的方法是同步的,所以如果我们不在多线程环境中工作,那么 ArrayList 是更好的选择。
最佳实践:
当我们初始化 ArrayList 或 Vector 时,总是以最大容量初始化 java 程序将需要,因为递增大小是更昂贵的操作。
我们可以同步 ArrayList 吗?
是的,ArrayList 也可以在 Collections.synchronizedList(arraylist) 方法的帮助下进行同步
List synchronizedArrayList=Collections.synchronizedList(arraylist);
|