优秀的编程知识分享平台

网站首页 > 技术文章 正文

Java学习五分钟系列:对比Vector、ArrayList、LinkedList

nanyue 2024-08-12 22:28:30 技术文章 8 ℃

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差;
  • 所以在开发过程中,要根据场景选择使用,操作是偏向于查询,还是偏向于修改和删除;是否要求线程安全。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


最近发表
标签列表