当前位置: 首页 > news >正文

网站建设编辑工作总结重庆最新情况 最新消息

网站建设编辑工作总结,重庆最新情况 最新消息,如何申请开通网站,北京北排建设公司招标网站HashMap概述 HashMap是基于哈希表的Map接口实现的&#xff0c;它存储的是内容是键值对<key,value>映射。此类不保证映 射的顺序&#xff0c;假定哈希函数将元素适当的分布在各桶之间&#xff0c;可为基本操作(get和put)提供稳定的性能。 HashMap在JDK1.8以前数据结构和存…

HashMap概述
HashMap是基于哈希表的Map接口实现的,它存储的是内容是键值对<key,value>映射。此类不保证映 射的顺序,假定哈希函数将元素适当的分布在各桶之间,可为基本操作(get和put)提供稳定的性能。

HashMap在JDK1.8以前数据结构和存储原理
【链表散列】
首先我们要知道什么是链表散列?通过数组和链表结合在一起使用,就叫做链表散列。这其实就是
hashmap存储的原理图。

【HashMap的数据结构和存储原理】
HashMap的数据结构就是用的链表散列。那HashMap底层是怎么样使用这个数据结构进行数据存取的呢?分成两个部分:
第一步:HashMap内部有一个entry的内部类,其中有四个属性,我们要存储一个值,则需要一个key 和一个value,存到map中就会先将key和value保存在这个Entry类创建的对象中。

static class Entry<K,V> implements Map.Entry<K,V> { 
final K key;	//就是我们说的map的key
V value;	//value值,这两个都不陌生
Entry<K,V> next;//指向下一个entry对象int hash;//通过key算过来的你hashcode值。
}

Entry的物理模型图:

第二步:构造好了entry对象,然后将该对象放入数组中,如何存放就是这hashMap的精华所在了。
大概的一个存放过程是:通过entry对象中的hash值来确定将该对象存放在数组中的哪个位置上,如果在这个位置上还有其他元素,则通过链表来存储这个元素。

【Hash存放元素的过程】
通过key、value封装成一个entry对象,然后通过key的值来计算该entry的hash值,通过entry的hash 值和数组的长度length来计算出entry放在数组中的哪个位置上面,
每次存放都是将entry放在第一个位置。在这个过程中,就是通过hash值来确定将该对象存放在数组中的哪个位置上。

JDK1.8后HashMap的数据结构

上图很形象的展示了HashMap的数据结构(数组+链表+红黑树),桶中的结构可能是链表,也可能是红黑树,红黑树的引入是为了提高效率。

HashMap的属性
HashMap的实例有两个参数影响其性能。

初始容量:哈希表中桶的数量

加载因子:哈希表在其容量自动增加之前可以达到多满,的一种尺度,当哈希表中条目数超出了当前容量加载因子(其实就是HashMap的实际容量)时,则对该哈希表进行rehash操作,将哈希表扩充至两倍的桶数。
Java中默认初始容量为16,加载因子为0.75。

static final int DEFAULT_INITIAL_CAPACITY = 14; // aka 16
static final float DEFAULT_LOAD_FACTOR = 0.75f;

【loadFactor加载因子】
定义:loadFactor译为装载因子。装载因子用来衡量HashMap满的程度。loadFactor的默认值为
0.75f。计算HashMap的实时装载因子的方法为:size/capacity,而不是占用桶的数量去除以capacity。
loadFactor加载因子是控制数组存放数据的疏密程度,loadFactor越趋近于1,那么数组中存放的数据(entry)也就越多,也就越密,也就是会让链表的长度增加,loadFactor越小,也就是趋近于0,那么数组 中存放的数据也就越稀,也就是可能数组中每个位置上就放一个元素。那有人说,就把loadFactor变为1 最好吗,存的数据很多,但是这样会有一个问题,就是我们在通过key拿到我们的value时,是先通过key 的hashcode值,找到对应数组中的位置,如果该位置中有很多元素,则需要通过equals来依次比较链表

中的元素,拿到我们的value值,这样花费的性能就很高,如果能让数组上的每个位置尽量只有一个元素最好,我们就能直接得到value值了,所以有人又会说,那把loadFactor变得很小不就好了,但是如果变 得太小,在数组中的位置就会太稀,也就是分散的太开,浪费很多空间,这样也不好,所以在hashMap 中loadFactor的初始值就是0.75,一般情况下不需要更改它。

static final float DEFAULT_LOAD_FACTOR = 0.75f;

【桶】
根据前面画的HashMap存储的数据结构图,你这样想,数组中每一个位置上都放有一个桶,每个桶里就是装一个链表,链表中可以有很多个元素(entry),这就是桶的意思。也就相当于把元素都放在桶中。
【capacity】
capacity译为容量代表的数组的容量,也就是数组的长度,同时也是HashMap中桶的个数。默认值是 16。
一般第一次扩容时会扩容到64,之后好像是2倍。总之,容量都是2的幂。

static final int DEFAULT_INITIAL_CAPACITY = 14; // aka 16

【size的含义】
size就是在该HashMap的实例中实际存储的元素的个数
【threshold的作用】

int threshold;

threshold = capacity * loadFactor,当Size>=threshold的时候,那么就要考虑对数组的扩增了,也就是说,这个的意思就是衡量数组是否需要扩增的一个标准。
注意这里说的是考虑,因为实际上要扩增数组,除了这个size>=threshold条件外,还需要另外一个条 件。
什么时候会扩增数组的大小?在put一个元素时先size>=threshold并且还要在对应数组位置上有元素, 这才能扩增数组。
我们通过一张HashMap的数据结构图来分析:

http://www.yayakq.cn/news/156434/

相关文章:

  • 模板网站配置文件西安企业网站制作
  • 杭州做兼职网站建设php门户网站模板下载
  • 免费建立自己的网站空间群晖 wordpress 性能
  • 网站的备案在哪备案吗南城网站优化公司
  • 用.aspx做网站玩具外贸网站
  • 网站底部友情链接怎么做的开发平台英文
  • 快速建站平台源码wordpress controls
  • 网站商城制作费用金猪云高端网站建设
  • 哪个网站做期货数字币谷歌paypal下载
  • 平台网站建设外包做亚马逊有看数据的网站吗
  • 高唐建筑公司网站asp.net 网站运行助手
  • 深圳国内网站建设北京电商网站开发
  • 极路由 做网站公司网站备案选个人
  • 网站制作教程谁的好南通如何做网络营销
  • 杭州思拓网站建设江西锦宇建设集团有限公司网站
  • 桥头做网站深圳比较好的设计院
  • 有趣的网站游戏开发区人才网最新招聘信息
  • 南平市建设集团网站广告学是热门还是冷门
  • 防止网站扫描唐朝网站
  • 东莞网站制作智能 乐云践新提供网站技术
  • 网站购物车代码怎么做鞍山晟宇网站建设
  • 有没有免费注册域名的网站建筑公司发展规划
  • 南通专业制作网站济南网站seo哪家公司好
  • 网站域名备案武安企业做网站推广
  • 试客类网站开发清洁设备网站模版
  • 自己制作的网站怎样做网络推广在哪济南兴田德润什么活动
  • 怎样搭建免费网站智能商标logo设计
  • 扬州整站seo备案号查询系统
  • 双辽做网站怎么做网站注册系统
  • 做外贸都有哪些好网站网站设计与建设第一章