关闭

为什么要学习HashMap的底层原理?

3600人阅读 评论(6) 收藏 举报


本文转载自公众号  码农翻身





上周发了一篇文章《漫画:什么是HashMap?》,引起了不少人的讨论,有一个人的留言引发了我的思考:“作为一个程序员, 真的有必要学习这些底层原理吗? 我会用了不就行了吗? 为什么面试者喜欢问这么细节的东西呢?”


是啊,在日常的工作中,如果只是做应用层面的业务开发,大多数都是直接把HashMap new 出来,调用put方法,放入key,value 就完了。 


很少人会用到像public HashMap(int initialCapacity, float loadFactor)这样的构造函数,更不会去调整那个loadFactor,也不会关心HashMap的容量为什么是2的幂。


HashMap 提供了一个绝佳的范例,展示了编程中对于数据结构/算法的应用,例如位运算,Hash,数组,链表,红黑树等。我一直强调数据结构对于程序员逻辑思维能力的训练,学习下HashMap的实现原理,绝对是有好处的,但是这个好处显得比较“,有没有更现实一点的意义? 


我在码农翻身QQ群里做了一个调查:为什么要学习HashMap的底层原理? 除了面试以外,有什么用处?


各位同学的回答五花八门,比如内功派:


石头:为啥要学?练武功,不要内功,能成为高手么?

AT:不是合理运用底层原理才能写出好的吗?

HQT:就喜欢扒光底层原理的快感.

艺术人生: 越是底层的东西,对于想成为高级程序员越显得重要,必须得学

年年:学过了你会知道“哇靠,原来是这样”、“这个太妙了”,之后在别的问题上,这些奇妙的点可能会给你很大的启发


也有鄙视面试者的:

漠北 :感觉那个面试的人也是不知道问什么问题。

老王: 问那个问题的人学历一定不高。


有和实际工作密切相关的:

hugo : hashmap这种数据结构在开发中是很常用的, 在高并发的情况下,如果不注意这些数据结构的特性很容易出现各种问题而不知道怎么排查。

Tosh : 我感觉 完全不考虑性能问题 不考虑优化 跟搬砖就真的没区别了

代帧:对于只想拿死工资的人来说不用学习,对于想提升自己,拿到更高offer的人来说,必须要掌握。


其中“老金”和“年年”的回复和我的观点不谋而合、深得我心:

老金: 如果你能坚持看底层原理,至少可以证明是静得下心学习的人, (学会原理)证明了你和其他面试者不一样。


年年:你学了这个一是能够证明你对编程的兴趣不是停留在表面、二是证明你比较有学习的能力。最重要的一点是企业通过这个筛选招聘,你不会就不能进入好的公司,参与大的工程,难以提升自己的水平。


确实是这样,现在软件和互联网很火爆,很多人转行“入坑”,造成一个现象就是初级程序员过剩,那企业在挑选的时候怎么办呢? 他们怎么筛选呢? 


对于一些技术驱动型公司来讲,他们肯定要挑选那些基础更扎实的人,因为在工作中这些基础知识会被直接使用。


对于业务驱动型公司(在国内估计是占大多数),面对大量的候选人,他们要看一个人是不是只是浮在表面, 有没有兴趣、有没有能力挖掘底层,虽然这些底层的原理在工作中并不会直接去使用! 很明显,这样的程序员成长的空间更大,也更能发挥价值。


这里边有个潜台词就是: 你把这么底层的原理都搞定了,应用层那点破事儿还不是手到擒来?!


“面试造航母,工作拧螺丝” 不无道理,听起来有点无奈和残酷。


我回想了我多年前经历的几次面试,Java这一块儿好像没有人问过我HashMap原理这样细节的问题,也许我们那个时代的先进技术在现在看来非常落伍,还在折腾MVC, AJAX这些东西, 远远比不上现在的同学们了。大家现在要学的东西,掌握的东西已经不可同日耳语了,门槛提高了!


技术的发展,知识的积累就是这样,一代更比一代强。


接下来的一个问题就是,如果大家都掌握了这些原理怎么办?  


我估计门槛会再度提高, 没办法,程序员就是这么苦逼, 不过好处就是:也许你成为面试官了......


PS:你觉得为什么要学习HashMap的底层原理?除了面试之外有什么实际用处? 欢迎留言!





—————END—————




喜欢本文的朋友们,欢迎长按下图关注订阅号程序员小灰,收看更多精彩内容




1
1
查看评论

HashMap底层详解

HashMap底层详解,看完就明白了
  • mid120
  • mid120
  • 2016-06-12 17:35
  • 1439

程序员小灰2017年原创汇总

点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!这一年多时间里,小灰总共创作了40多篇漫画文章。许多读者反映查找历史文章太麻烦了,怎么办呢?于是小灰把2016年下旬到2017年末的所有漫画都汇总起来,方便大家点击阅读。祝小伙伴们元旦快乐!算法漫画:什么是ConcurrentH...
  • bjweimengshu
  • bjweimengshu
  • 2017-12-27 00:00
  • 2881

HashMap实现原理分析

HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线性数组。这可能让我们很不解,一个线性的数组怎么实现按键值对来存取数据呢?这里HashMap有做一些处理。   首先HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next,...
  • vking_wang
  • vking_wang
  • 2013-11-05 15:23
  • 293587

Java中HashMap底层实现原理(JDK1.8)源码分析

这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JDK1.6.JDK1.7的。现在我来分析一哈最新的JDK1.8的HashMap及性能优化。 在JD...
  • tuke_tuke
  • tuke_tuke
  • 2016-06-05 11:13
  • 14999

HashMap底层实现原理和扩容

hashmap的原理实现和扩容机制
  • Negetive
  • Negetive
  • 2016-10-18 17:41
  • 505

HashMap底层实现原理

在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8...
  • yinbingqiu
  • yinbingqiu
  • 2017-03-09 18:41
  • 3045

JAVA HashMap底层实现原理

1.    HashMap概述:    HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。   ...
  • wangxin1982314
  • wangxin1982314
  • 2016-01-14 10:54
  • 1716

实战-深入剖析HashMap实现原理

HashMap是继承至AbstractMap,基于Map接口的一种哈希表的实现。 public class HashMap     extends AbstractMap     implements Map, Cloneable, Serializable ...
  • zz_cl
  • zz_cl
  • 2016-09-10 10:03
  • 661

HashMap的底层工作原理和并发问题

源码分析首先来看下HashMap一个典型的构造函数:transient HashMapEntry<K, V>[] table;public HashMap(int capacity) { if (capacity < 0) { throw new Illegal...
  • whsdu929
  • whsdu929
  • 2016-09-19 20:26
  • 756

为什么面试要问hashmap 的原理

HashMap的工作原理 HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。Concu...
  • whhahyy
  • whhahyy
  • 2015-10-26 22:00
  • 876
    个人资料
    • 访问:84303次
    • 积分:1072
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:103篇
    • 译文:0篇
    • 评论:73条
    文章分类
    最新评论