Java学习五分钟系列,目的是为让大家在短时间内搞清楚一项技术的概念、优缺点和适用场景,想要深入的了解,还需要投入更多的时间。
Java的集合类,值得我们深入的学习,建议大家有时间的话,可以阅读一下源码;并且可以对比一下每个JDK版本中,集合类源码的变化。
今天我带大家简单对比一下Vector、ArrayList、LinkedList。
相同之处
三者都实现了集合框架中的 List接口,它们都是【有序集合】。
它们有些功能也比较相似,例如都提供了按照位置进行查询、新增或者删除,提供了迭代器以遍历其内容等。
不同之处
- Vector :是基于数组实现的,可以根据需要自动扩展容量,当数组满了,会创建新的数组,并Copy原来的数据到新的数组。Vector是线程安全的,如果不考虑线程安全问题,建议不要使用。
- ArrayList:也是基于数组实现的,也可以动态地调整容量,和Vector不同的是,Vector扩容的时候翻倍,ArrayList则是(默认)增加50%。ArrayList不是线程安全的,所以性能要高。
- LinkedList:顾名思义,双向链表,不需要像Vector、ArrayList那样调整容量;LinkedList也不是线程安全的。
优缺点及适用场景
- Vector和ArrayList本质都是动态数组,所以各个元素都是按照顺序存储的,所以很适合随机访问的场景,可以快速的定位到某一个元素。但是在插入和删除的时候,除非是尾部元素,在操作其他元素的时候,性能往往很差(因为要移动其他元素);
- LinkedList在插入和删除时,效率很高,但是随机访问的性能会比Vector和ArrayList差;
- 所以在开发过程中,要根据场景选择使用,操作是偏向于查询,还是偏向于修改和删除;是否要求线程安全。