JAVA中ArrayList 和 Vector 比较:
1. API
从提供API来看,二者几乎一致,vector多了element系列API,如elementAt()、firstElement()等。但实现的功能基本一致,故如果需要选择的时候API的差别不应该一个重要的参考项
2. 线程同步
Vector的每个方法都是线程同步的,因此当需要保证线程安全时应该选用Vector。而ArrayList是线程不安全的,故如果不需要保证线程安全时应该采用ArrayList以避免不必要的同步开销,降低效率
3. 空间增长
Vector和ArrayList内部都是维持一个数组来实现存储的,都可以提供指定数组默认大小,同时有当空间不足时,内部有容量自动增长的机制,Vector默认为容量翻倍,ArrayList默认为增长原容量的50%,但是Vector可以指定增长的大小(Vector(int initialCapacity, int capacityIncrement))。当你知道你需要存储的空间大小时,在生成Vector或者ArrayList对象时,最好指定大小,这样可以避免容量自动增长时的数组生成和复制开销。如果不知道自己的需求,采用Vector会好一些,因为可以指定增长的容量。
4. 使用情况
Vector和ArrayList都是采用数组进行顺序存储的,查询的效率较高,且在尾部添加或者删除元素的时间复杂度都为O(1)。但是如果在中间插入或者删除元素时,时间复杂度为O(n - i),需要额外的数组复制移动开销。因此如果你的情况是需要在尾部添加删除元素,或者主要用于查询,则采用Vector和ArrayList都是不错的选择,否则,应该采用LinkedList,它采用链表实现,中间插入或删除元素复杂度都为O(1)