2020年Java面试208题 017-请说说List,Set,Map的区别

时间: 2021年9月26日星期日 阴

说声抱歉

这个专辑做了12期,就放了 7 个月,这说起来我都不好意思,究其原因,还是懒,其他的理由都站不住脚,就是自己懒这个理由最坚挺,谁都得服。我自己也是服了,咋就一下懒了7个月呢。想想也是自己性格使然,又想想,这个专辑还得继续写下去,从今天继续吧。

问题

本期要说的是《2020年Java面试208题》的第17题,面试官问了一个特通用的问题:

请说说List,Set,Map的区别。

这个问题在对初级程序员的面试中,是特别常见,甚至很多中级程序员面试的时候也会遇到这个问题。

这个题我个人认为应该从三个接口的特性进行解释,最好在讲解的时候从源码的角度进行说明。

这个题目太简单,基本上很难讲出什么新意,所以如果按照老套路进行回答,面试官很难对你留下印象,因此,在几句话进行基础解答后,一定要扩展出自己的更深的理解。

演示面试

那么现在我就来进行演示面试。

您好,面试官。

1 List Set Map 这是三个接口。

2 一般来说,List 的元素是可重复的,Set的元素是不可重复的。

不过这一点在List和Set的源代码上并没有定义出来,其实很好理解,元素是不是重复,只能在方法的实现代码中进行约束,而接口在传统意义上来说是不支持方法的实现的,因此从代码级别分析 Set 并没有办法约束元素不重复。

Set 的官方文档是给出了建议,建议实现者不要元素重复。也就是说,这是一个协议,是一种约定。

3 一般来说,List的元素是有序的,Set的元素是无序的

List的方法定义中,有 indexOf 方法这个方法是找到某个元素在集合中的索引位置,从这一个方法的定义就决定了List中的元素必须是有序的,因为无序的话就没可能找到某个元素的索引位置。

List的 add 方法和 set 方法,也都有索引位置这个参数。

这几个方法就决定了 List 一定是有序的。

而 Set 是无序的这个事儿,就没办法在代码里面约束了,事实上,Set接口根本就没规定元素无序,甚至就没有这样的建议。只不过我们一般用HashSet 类用的多了,而HashSet是元素无序的,因此很多程序员总是说 Set 无序的,这个其实是错误的认识。比如 TreeSet 和 LinkedHashSet 都是有序的。

4 List 和 Set 都是元素单列的,Map是键值对结构的双列

个人感觉 Map 在底层其实也应该理解为是单列的,只不过Map的每个元素都是 Entry 类型的。这个Entry类型是 Map 接口的内部接口,该接口定义了一个键值对结构。因此,Map其实是一种变种的 Set, 当然,这是我个人的理解,没见过啥资料这么定义的 。

事实上 ,Map 和 Set是非常相像的,HashSet的底层就是使用的HashMap。

单纯从这三个接口的定义角度的解释,我就说这么多,我的回答完毕了。

下期再见

对这个问题最核心的回答,我觉得就应该说明这些,网上很多东拉西扯的讲一大堆ArrayList  LinkedList HashMap  SortMap啥的,我觉得扯得有点儿远,不过也不算错,能扯就扯会儿,毕竟你多说会儿就多一些机会。

如果真东拉西扯的话,我觉得还可以扯扯 JDK8接口的 default 方法,还可以在说说这三个接口对 Lambda语法的支持。这些都是挺给力的聊天热点,会让你的面试成功性更大。

不过我这一期就不说这些了,我今后把这些作为新的面试题讲讲吧。

好的,本期就到这里,我们下期再见。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小崔爱读书

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

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

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

打赏作者

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

抵扣说明:

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

余额充值