多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
具体原理参考文章: [http://zhangshixi.iteye.com/blog/672697](http://zhangshixi.iteye.com/blog/672697) [http://www.admin10000.com/document/3322.html](http://www.admin10000.com/document/3322.html) **HashMap存储函数的实现put(K key, V value)** 根据下面put方法的源代码可以看出,当程序试图将一个key-value对放入HashMap中时 * 1.程序首先计算该key的hashCode()值 * 2.然后对该哈希码值进行再哈希 * 3.然后把哈希值和(数组长度-1)进行按位与操作,得到存储的数组下标 * 4.如果该位置处设有链表节点,那么就直接把包含的节点放入该位置。如果该位置有结点,就对链表进行遍历,看是否有hash,key和要放入的节点相同的节点,如果有的话,就替换该节点的value值,如果没有相同的话,就创建节点放入值,并把该节点插入到链表表头(头插法)。 #### ①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。 当两个不同的键对象的hashcode相同时会发生什么? 它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。 因为HashMap的好处非常多,我曾经在电子商务的应用中使用HashMap作为缓存。因为金融领域非常多的运用Java,也出于性能的考虑,我们会经常用到HashMap和ConcurrentHashMap。