详解HashMap数据结构实现

  HashMap的设计是由数组加链表的符合数据结构,在这里用自己的语言以及结合源码去总结一下,如果有不对的地方希望评论指正,先拱手谢谢。

  HashMap是日常中非常常用的一种数据结构,我们要想深入了解学习任何一门技术,都是要先应用,再深入。深入就要了解实现的原理,在java语言中,最基本的结构是数组以及类变量(引用),HashMap是两者的结合,更明确的说,HashMap是数组以及链表的结合。

public class HashMap<K, V>extends AbstractMap<K, V>implements Map<K, V>, Cloneable, Serializable
{private static final long serialVersionUID = 362498820763181265L;static final int DEFAULT_INITIAL_CAPACITY = 16;static final int MAXIMUM_CAPACITY = 1073741824;static final float DEFAULT_LOAD_FACTOR = 0.75F;static final int TREEIFY_THRESHOLD = 8;static final int UNTREEIFY_THRESHOLD = 6;static final int MIN_TREEIFY_CAPACITY = 64;transient Node<K, V>[] table;transient Set<Map.Entry<K, V>> entrySet;transient int size;transient int modCount;int threshold;final float loadFactor;
...
}

  我们可以看到HashMap维护了一个Node<K,V>数组,在这里我们再看Node的实现

 static class Node<K, V>implements Map.Entry<K, V>{final int hash;final K key;V value;Node<K, V> next;
.....
}

Node维护了四个属性,Key,Value,Hash码,以及关键的:Node<K,V> next,每一个Node持有下一个Node,形成了链表。

  在这里奉上一张HashMap的导图,当我们插入一个值时,即插入了一个Node,通过Node的key的hashcode与Node<K,V> table 数组的长度来计算出这个Node在数组中的位置,也就是下标。计算的方法就是hash算法,当我们插入一个Node的时候,Key是唯一的,但是不同的key求出的hashcode

转载于:https://www.cnblogs.com/beforedawn/p/6850038.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java web开发学习手册_Java 人必备学习手册开发下载!

今天给大家分享一套 5000 页的 Java 学习手册&#xff0c;新鲜出炉&#xff01;此手册内容专注 Java技术&#xff0c;包括 JavaWeb&#xff0c;SSM&#xff0c;Linux&#xff0c;Spring Boot&#xff0c;MyBatis&#xff0c;MySQL&#xff0c;Nginx&#xff0c;Git&#xff0c;…

Django初次体验

Django初次体验 关于django的安装&#xff0c;宝宝们可以参考django简介以及安装 Django框架的搭建 在终端中进入需要建立项目的目录 执行&#xff1a; django-admin startproject mysite其中&#xff0c;mysite是项目目录名&#xff0c;可以自定义 我们来看看startprojec…

【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】...

【002-Add Two Numbers (单链表表示的两个数相加)】 原题 You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked…

不出现php version网页_php冷知识 - 从命令行参数列表中获取选项

分享一个php的冷知识 - &#xff0c;从命令行参数列表中获取选项用到的函数是getopt 说明函数签名是这样的getopt ( string $options [, array $longopts [, int &$optind ]] ) : array|bool false解析传入脚本的选项&#xff0c;成功返回数组&#xff0c;解析失败返回fals…

[计算机视觉][神经网络与深度学习]Faster R-CNN配置及其训练教程2

faster-rcnn分为matlab版本和python版本,首先记录弄python版本的环境搭建过程.matlab版本见另一篇&#xff1a;faster-rcnn(testing): ubuntu14.04caffecuda7.5cudnn5.1.3opencv3.0matlabR2014a环境搭建记录 首先,进入官方github网站:https://github.com/rbgirshick/py-faster-…

modbus从站模拟软件_作为工控电气人,你知道我们必备的软件有哪些吗?

作为工控电气人&#xff0c;你知道我们必备的软件有哪些吗&#xff1f;今天我就来给大家介绍一下&#xff0c;工控电气人常用的几款软件&#xff0c;有了它们&#xff0c;我们的工作学习将会更易上手&#xff0c;效率翻倍。以下介绍主要是分为电工常用软件&#xff0c;PLC编程软…

【数据分析】豆瓣电影Top250爬取的数据的可视化分析

豆瓣Top250网址 将之前爬取到的豆瓣电影进行简单的可视化&#xff1a; 数据列表保存为CSV格式&#xff0c;如图 导入数据 做好准备 #!-*- coding:utf-8 -*- import pandas as pd import numpy as np import matplotlib.pylab as plt import re from numpy import rank from bu…

sqlmap的二次开发

1、sqlmapapi的帮助信息。 -s 启动sqlmap作为服务器 -h 指定sqlmap作为服务器的IP地址&#xff0c;默认127.0.0.1 -p 指定sqlmap服务器的端口&#xff0c;默认端口为8775 2、启动服务 浏览器访问&#xff1a; 3、api介绍&#xff1a;sqlmap项目下的api.py文件含有所有的api adm…

docker nginx配置_docker随手笔记第十二节 jenkins+docker+nginx+纯静态页面配置

docker随手笔记第一节 docker概念及安装docker随手笔记第二节 docker常用命令解析docker随手笔记第三节 docker构建java镜像docker随手笔记第四节 docker安装mysql5.7docker随手笔记第五节 docker安装redis4.0docker随手笔记第六节 docker安装jenkinsdocker随手笔记第七节 jenk…

【机器学习】逻辑斯蒂回归原理

逻辑斯蒂函数 引入&#xff1a; 在线性感知器算法中&#xff0c;我们使用了一个f(x)x函数&#xff0c;作为激励函数&#xff0c;而在逻辑斯蒂回归中&#xff0c;我们将会采用sigmoid函数作为激励函数&#xff0c;所以它被称为sigmoid回归也叫对数几率回归&#xff08;logistic …

手机影音第十一天,显示视频缓冲,显示卡顿时的网速,播放系统视频时调用播放器的选择...

代码已经托管到码云&#xff0c;有兴趣的小伙伴可以下载看看https://git.oschina.net/joy_yuan/MobilePlayer一、设置视频缓冲进度显示视频播放进度的效果图如下&#xff1a;灰色的是缓冲的进度。原理&#xff1a;只有播放网络视频时&#xff0c;才有缓冲这个说法&#xff0c;所…

Django之创建应用以及配置路由

Django之创建应用以及配置路由 配置所有IP都可以访问你的项目 1.进入manage.py同级的my_web里面的settings.py的文件 2.在文件的第28行把ALLOWED_HOSTS []改成ALLOWED_HOSTS [*] 注意&#xff1a;*代表的是所有IP都可以访问 创建一个app应用 在终端中&#xff0c;结束项目…

python中opencv是什么_python-opencv的用法

#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 # 接收两个参数&#xff0c;一个是文件名&#xff0c;一个值&#xff0c;如果值为1&#xff0c;接收的是彩色图片&#xff0c;如果值为零&#xff0c;接受的是灰度图片。会有一个返回值&#xff0c…

【Tensorflow】卷积神经网络实现艺术风格化通过Vgg16实现

卷积神经网络实现艺术风格化 基于卷积神经网络实现图片风格的迁移&#xff0c;可以用于大学生毕业设计基于python&#xff0c;深度学习&#xff0c;tensorflow卷积神经网络&#xff0c; 通过Vgg16实现&#xff0c;一幅图片内容特征的基础上添加另一幅图片的风格特征从而生成一幅…

抗误码技术

抗误码技术&#xff1a; 视频传输过程中的错误是不可避免的&#xff0c;抗误码技术历来都足视频领域一个研究的热点。H264标准继承r以前视频编码标准中某些优秀的错误恢复工具&#xff0c;同时也改进和创新了多种错误恢复丁具。这些错误恢复的工具主要有&#xff1a;参数集、数…

Linux统计文件行数、字数、字节数

2019独角兽企业重金招聘Python工程师标准>>> 语法&#xff1a;wc [选项] 文件 说明&#xff1a;该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名&#xff0c;则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符…

【Tensorflow】人脸128个关键点识别基于卷积神经网络实现

引言&#xff1a; 卷积神经网络 卷积神经网络最早是为了解决图像识别的问题,现在也用在时间序列数据和文本数据处理当中,卷积神经网络对于数据特征的提取不用额外进行,在对网络的训练的过程当中,网络会自动提取主要的特征.卷积神经网络直接用原始图像的全部像素作为输入,但是内…

python 爬虫 包_python爬虫学习之路-抓包分析

利用浏览器抓包&#xff0c;是爬虫中的很实用的技能。在爬虫编程之前&#xff0c;我们要对抓取的目标页面有所了解&#xff0c;比如浏览器的这个请求这个页面中间都经历了什么&#xff0c;数据是怎么发送和返回的。 抓包的作用 我把抓包分析的作用简单列一下&#xff1a; 分析请…

帧间EC原理和过程

出错的宏块&#xff08;图中灰色表示&#xff09;根据上、下、左、右四个方向相邻宏块的不同分割情况及预测类型进行插值。将最后的结果中进行比较&#xff0c;选取边界像素差值之和最小者为最优的EC方案。其步骤为&#xff1a; 1、判断相邻宏块左上角8*8块的预测模式是否大于R…

Maven依赖的是本地工程还是仓库jar包?

相信大家都碰见过maven配置的依赖或者是jar包或者是工程&#xff0c;在开发的过程当中&#xff0c;我们当然需要引入的是工程&#xff0c;这样查看maven依赖的文件的时候&#xff0c;就能直接查看到源码。 一、本地工程依赖 举个例子&#xff0c;其架构如下所示&#xff08;以下…