Java集合方面的面试题:对比ArrayList和Vector对象,分析Vector为什么不常用

我在面试的时候,一般会问到如下的问题。

问法1,我先提问在数据结构里,数组和链表有什么差别,这个问题大多数人都能回答出,随后我就问:Vector和ArrayList(或者再加上LinkedList)这些集合对象之间有什么差别?

针对后一个问题,有人就会说ArrayList是基于数组(从名字上能看出),而Vector对象基于链表实现(被第一个问题误导)。这就错了,其实它们两者都是基于数组。

问法2,如果我通过构造函数初始化了长度是10的ArrayList 对象,具体的实现代码如下。

List arrayList = new ArrayList(10);

那么当我插入第11个元素后,会出现什么情况?我一般会给几个选项,第一个是报语法错误,第二个是会出现数组越界异常,如果你感觉都不是,那么你说会出现什么情况?

正确答案是ArrayList会扩展50%的长度。我问下来,有个别人会选第一或第二个选项,但能正确答案的人也不多。

问法3,ArrayList,LinketList和Vector哪些是线程安全的,哪些是线程不安全的?

这里提到的线性安全是指:如果多个线程同时往该集合对象里插入元素,会不会出现冲突,这点在后文里会详细提到,这里先请大家记得答案,Vector比较特殊,是线程安全的,另外两个是线程不安全的。

我们来综合一下上述3个问题的答案:

第一,Vector是线程安全的,ArrayList是不安全,所以在插入等操作里,Vector是需要一定开销来维护线程安全,而我们大多数的程序都运行在单线程环境下,无需考虑线程安全问题,所以大多数的单线程环境下ArrayList的性能要优于Vector。

第二,比如刚开始我们创建了长度是10的Vector和ArrayList,当插入第11个元素时,它们都会扩容,Vector会扩充100%,而Vector会扩充50%,所以从节省内存空间角度来看,建议使用ArrayList。

出于上述两点的考虑,在项目里我们不怎么用到Vector对象了。

  关于集合类的面试文章汇总:

Java集合方面的面试题:Set集合是如何判断重复

Java集合方面的面试题:对比ArrayList和Vector对象,分析Vector为什么不常用
Java集合方面的面试题:ArrayList和LinkedList有什么差别?分别适用于哪些场景?
Java集合方面的面试题:TreeSet、HashSet和LinkedHashSet的各自特点

Java集合方面的面试题:泛型的继承和通配符

Java集合方面的面试题大汇总

 这是我的公众号,其中包含了大量面试文章,同时我自己出了多本Python和Java方面的书籍,会定期在公众号里发书的电子版。请大家关注下我的公众号,谢谢了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hsm_computer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值