龙空技术网

为什么所有Java面试都会问到List、Set、Map?

高级Bug调查员 3214

前言:

此时你们对“java中map和list的区别”大体比较珍视,兄弟们都想要了解一些“java中map和list的区别”的相关资讯。那么小编同时在网上搜集了一些有关“java中map和list的区别””的相关文章,希望朋友们能喜欢,你们快快来学习一下吧!

作者 | Java圣斗士 | 原创图文,转载请注明出处

Map:我不是集合,却总要和List一起出现

“Map是不是集合?它和List有什么区别?”

相信绝大多数Java程序员都见过上面这道面试题,可以说,Map和Collection下的List、Set这两个接口已经成了util包中当之无愧的面试必考三剑客。

不知从何时开始,Map这个本和Collection没什么交集的接口,成了程序之外的“Collection”家族的John Snow。

为什么Map总是要和List等一起被问到?

似乎从来没人思考过。就好像这个问题天生具有迷惑性,可以让面试者猝不及防地将Map与集合混淆,从而漏出破绽!然后可以被面试官冷冷得讽刺一句:“哼!辣鸡!”。

集合,这不是高中的知识吗?

Java中的集合概念来源于数学,在高中的时候就已经学过:

“把一些能够确定的不同的对象看成一个整体,就说这个整体是由这些对象的全体构成的集合。”

一个大括号,一些零零散散的元素就构成了一个集合:

{1, 3, 5, 7, 9}

集合中会有我们需要用到的元素,它们都是一个一个独立的个体,不可分割。

Collection接口就是数学中这种多个元素的整体的一个抽象,从而衍生出允许元素重复的List与不能重复的Set。

而Map呢?虽然可以维护一对一对的 k-v映射,看似好像是一堆元素组织在了一起,但由于key和value本身就不存在什么共同的特征,因此和集合的概念还是有很大区别的。

面试造火箭,工作拧螺丝

好了,现在的面试官好像已经看出面试者渐渐变得聪明了,于是他们开始不那么执著地问Map出身的问题了,他们希望更加刁难苦逼的求职者:

“请问Map的工作原理是怎样的?”

“List的实现原理是怎样的?”

“你在工作中有木有分析过Map和Set的共通之处?”

小白表示,我在工作的时候用到的最多的就是list.add()和forEach呀!

面试造火箭,工作拧螺丝的戏码在无数的Java求职过程中可谓比比皆是。很多就算是进了BAT等一线大厂依然只是默默地进行着重复性的机械工作,就好像流水线上拧螺丝的钳工,可以随时被取代。

那么,为什么这些容器接口如此重要,重要到就算工作中几乎用不到解释原理,面试官也要问出个一二三?

很多写业务的程序员,和这些小白们一样,用的最多的就是add 和 for循环,仿佛所有的集合都可以通过这些简单的几个方法就能搞定所有的业务场景。

数组、表、红黑树、哈希,这些实现层的重要概念是计算机相关领域最最重要的知识内容——数据结构与算法。

为什么List、Set、Map被这么多的面试问到,就是因为它们考验了一个程序员对一些计算机相关知识的综合掌握程度,甚至可以洞悉一个求职者的知识参悟性。换句话说,“一千个哈姆雷特,可以出自一千个读者”,层次的不同对源码的解读也会不尽相同,工资也会有所不同。

这些重要的能力考量不仅可以体现一个程序员的技术水平,同时可以得知这些程序员理解业务的速度以及准确度,他们看待问题的角度以及一定的语言表达能力。

一个小小的HashMap,虽然用法简单,但在特定的场景也会有不同的使用变化,比如扩容问题,比如并发问题,线程安全问题等等。延伸而得的无数小问题也是可以考察一名程序员的知识广度和全面性。

所以,至今为止,三剑客都是面试环节JDK的一道重要主菜。

随着如今Java生态的越发成熟,很多优秀的框架喷涌而出,Spring、Spring Boot、JPA、Mybatis、Redis等等。这些解决各种Java应用场景的框架慢慢地加重了Java程序员的学习负担,很多在实际工作中用不到的技术,但由于未来求职可能被问及,或者考虑到技能全面性等因素,大家都会去网上自学,也就间接造成了很多Java程序员对JDK本身研究和参悟的缺乏。

虽然广度得到了一定程度的延伸,但是随着时间的推移,也会慢慢发现:深度,才是一个程序员真正应该加强的方向。

曾经在CSDN博客上看到有一篇阿里大佬的技术经分享,在谈到如何学好Java的时候,他果断地写到:玩好JDK。

因为在JDK中,有太多好的思想和设计,不仅仅是List、Map等,甚至是一些设计模式也都包含在JDK的接口中。

那么我们说活学活用和触类旁通,在很多其他的框架源码中,可能也会看到同样的使用方式,不过是换了一个葫芦而已。

因此,不论是List、Set、Map这些高频容器面试题,还是其他各种经典实现原理,我们都应该做到认真对待,学好学透。

因为深度,才是一个Java程序员的不灭价值。

往期精彩:

大话Java 8 Lambda 表达式(一)

对话式情景剖析,String被final修饰的真正原因!一篇足矣

能否成为架构师?抽象工厂模式,真正考验你抽象能力的时候到了

如何做到基础扎实?大牛说:玩好JDK

束缚程序员工资的,从来不是什么算法和设计模式

关注Java圣斗士,犀利的程序员IT视角,带你洞悉Java面试内幕,Java技术分享以及IT业内要闻,领略不一样的技术风景线。

标签: #java中map和list的区别 #list与map的区别