知识点5:ArrayList与Vector的区别

来源:互联网 发布:中国知名网站知乎 编辑:程序博客网 时间:2024/05/29 17:16

ArrayList的底层实现都是基于Object[],因此具有数据的特性,表现在每个元素都有相应的索引值,查询数据的效率比较高。同时,相比于数组,它具有容器扩容的特性,也就是自增长机制,这使得在ArrayList时不用考虑动态规划内存空间的问题。但ArrayList是线程不安全的,在多线程开发时容易引发线程安全问题,比如数据丢失,或者不能取到相应的值等。
Vector是在JDK1.0版本中就出现的一个元老级的类,在JDK1.2版本发布时,因为注重框架的整合,因为开发了新的使用接口与实现类,比如ArrayList就是这时候的产物。在JDK1.2推出时,为了使在此之前的开发者们能够实现过渡,因此把Vector设置为Set接口的一员。它与ArrayList非常相似,同样基于Object[],同样具有自增长机制。但区别在于,Vector是线程安全的,但在性能比较方面,ArrayList的性能比Vector更高。主要原因在于:
1.Vector中使用大量的synchronized进行修饰,就是为了避免出现线程不安全的情况,但也正因为如此,因为涉及多重的判断及线程阻塞问题,所以它的性能就被拉低了。
2.两个类的自增长方式不一样,当空间不足时,Vector会增加原来空间的一倍,而ArrayList增加原来控件的50%。在同等条件下,ArrayList的扩容量小于Vector,也会更节约内存空间,因此性能自然会有所提高。

下一篇:常见的排序算法:敬请期待

0 0