文档章节

HashMap之微代码解析-总结整理

指尖Coding
 指尖Coding
发布于 2016/08/13 11:47
字数 414
阅读 6
收藏 0

1.HashMap继承AbstractMap类,实现Map接口。key和value都允许为null,非线程安全。

2.HashMap底层是使用数组和链表实现的,当new一个HashMap的时候,jvm就会初初始化一个数组。

3.HashMap的put方法是,现根据key计算hashcode,根据hashcode计算该元素在数组中的位置,数组的内容是一个链表(链表有next节点)。

4.哈系运算会有重复的哈希值,对于哈希值的冲突,HashMap采用链表(挂链)来解决的。

数组存储的是链表,链表是为了解决哈希冲突的。

/**
* next就是为了哈希冲突而存在的。比如通过哈希运算,一个新元素应该在数组的第10个位置,
* 但是第10个位置已经有Entry,那么好吧,将新加的元素也放到第10个位置,将第10个位置的
* 原有Entry赋值给当前新加的 Entry的next属性。数组存储的是链表,链表是为了解决哈希冲突的。
*
*/
static class Entry<K,V> implements Map.Entry<K,V> {    
     final K key;    
     V value;    
     Entry<K,V> next;    
     int hash;    
}    

5.当两个对象的hashcode相同会发生什么?

因为hashcode相同,所以它们的存储数组位置相同,‘碰撞’会发生。因为HashMap使用LinkedList存储对象,这个Entry(包含有键值对的Map.Entry对象)会存储在LinkedList中。

6.如果两个键的hashcode相同,你如何获取值对象?

根据hashcode找到数组位置,然后遍历LinkedList直到找到值对象,HashMap在链表LinkedList中存储的是键值对。

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
指尖Coding
粉丝 1
博文 52
码字总数 37092
作品 0
静安
一篇文章,全面总结Android面试知识点

本篇文章的所有知识点是亲身经历十余家一二线互联网企业面试后总结产出,包含应聘Android开发岗位的各个方面的高频知识点,主要针对但不局限于Android应届面试。以下所有知识点都整理发布在G...

Ruheng
2017/10/17
0
0
一篇文章,全面总结Android面试知识点

本篇文章的所有知识点是亲身经历十余家一二线互联网企业面试后总结产出,包含应聘Android开发岗位的各个方面的高频知识点,主要针对但不局限于Android应届面试。以下所有知识点都整理发布在G...

Ruheng
2017/10/17
0
0
Java集合 --- LinkedHashMap底层实现和原理(源码解析)

概述 文章的内容基于JDK1.7进行分析,之所以选用这个版本,是因为1.8的有些类做了改动,增加了阅读的难度,虽然是1.7,但是对于1.8做了重大改动的内容,文章也会进行说明。 LinkedHashMap,见...

起个名忒难
2017/09/24
0
0
Java容器源码分析-HashMap vs TreeMap vs LinkedHashMap

这里我采用的分析方式是帖子博客加上自己翻看jdk源码。有些情况下写一些测试的算法小例子加深印象。我这里只描述一下自己的总结想法 上一篇文章我们研究了set接口下的几个容器,由于其Set集合...

贾浩v
2017/10/19
0
0
LinkedHashMap了解一下

前言 LinkedHashMap类继承图 LinkedHashMap简述 LinkedHashMap的属性 LinkedHashMap的构造函数 LinkedHashMap常见Api解析 总结 前言 本文使用用的是jdk1.8 LinkedHashMap类继承图 我们先来了...

HikariCP
05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

es6

在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys(),该方法返回一个数组 传入对象,返回属性名 var obj = {'a':'123','b':'345'};console.l...

不负好时光
19分钟前
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

全部原谅
21分钟前
0
0
web.xml容器加载顺序

容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

Aeroever
23分钟前
1
0
Docker容器日志查看与清理

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日...

muzi1994
24分钟前
0
0
J2Cache 和普通缓存框架有何不同,它解决了什么问题?

不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!...

红薯
26分钟前
483
14

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部