map:我不是集合 , 却总要和list一起出现
“地图收藏?它和list有什么区别?”
相信大部分java程序员都见过以上面试问题 。可以说 , 地图和收藏下的列表和集合这两个界面 , 成为了util包中当之无愧的面试必考三剑客 。
【为什么所有java面试都会问到list、set、map?】不知道从什么时候开始 , 和collection没有交集的map在节目之外变成了“collection”家族的约翰斯诺 。
为什么map总是要和list等一起被问到?
好像没人想过 。好像这个问题本身就有迷惑性 , 会让面试官把map和set搞混 , 出其不意 , 从而泄露破绽!那你就可以被面试官冷眼冷语讽刺:“哼!辣鸡!” 。
集合 , 这不是高中的知识吗?
java中集合的概念来源于数学 , 高中就学会了:
“把一些能够确定的不同的对象看成一个整体 , 就说这个整体是由这些对象的全体构成的集合 。”
一个大括号 , 一些分散的元素构成一个集合:
{1, 3, 5, 7, 9}
集合中会有元素 , 都是独立的个体 , 不可分割 。
集合接口是数学中多个元素的整体抽象 , 这导致了允许元素重复.的list和不能重复的set
地图呢?虽然可以维护一对一的k-v映射 , 看起来是一堆元素组织在一起 , 但是因为键和值之间没有共同的特征 , 所以和集合的概念有很大的不同 。
面试造火箭 , 工作拧螺丝
好了 , 现在面试官好像看到面试官越来越聪明了 , 开始不那么执着地问地图起源的问题 , 希望能给努力的求职者添堵:
“请问map的工作原理是怎样的?”
“list的实现原理是怎样的?”
“你在工作中有木有分析过map和set的共通之处?”
小白说:“我工作时比较常使用list.add和foreach!
面试造火箭 , 工作拧螺丝的戏码在无数的java求职过程中可谓比比皆是.他们中的很多人即使进入bat等一线厂商后 , 仍然在默默做着重复性的机械工作 , 就像在流水线上拧螺丝的钳工 , 随时可以更换 。
那么 , 为什么这些容器接口如此重要 , 即使工作中很少用到解释原理 , 面试官还要问一个、两个、三个呢?
许多写业务的程序员 , 比如这些白人 , 比较常使用add和for循环 , 好像所有的集合都可以通过这些简单的方法处理所有的业务场景 。
数组、表、红黑树、哈希,这些实现层的重要概念是计算机相关领域比较重要的知识内容——数据结构与算法 。
为什么列表、集合、地图会被那么多采访问到?换句话说 , 就是因为它们考验了一个程序员对一些计算机相关知识的综合掌握程度 , 甚至可以洞悉一个求职者的知识参悟性 。说 , “一千个哈姆雷特可以来自一千个读者” 。不同的层次会对源码有不同的解读 , 薪酬也不同 。
这些重要的能力考虑不仅能反映程序员同时可以得知这些程序员理解业务的速度以及准确度 , 他们看待问题的角度以及一定的语言表达能力 。的技术水平
一个小hashmap , 虽然好用 , 但是在特定场景下会有不同的用法变化 , 比如扩容问题 , 比如并发问题 , 线程安全问题.无数小问题也可以考察一个程序员知识的广度和全面性 。
到目前为止 , 三剑客都是面试环节jdk的一道重要主菜.
- 你没见过的java入门
- 为什么王者荣耀刘邦不能给队友加盾
- 花菜为什么要焯水?
- 石头蟹为什么没人吃
- 为什么移动硬盘怕摔
- 木九十为什么那么贵
- 青金石如何保养更亮 如何保养青金石
- 泡大珠为什么越泡越小
- 身份证指纹为什么只录母指
- 日本当时为什么要炸珍珠港