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

佛山建网站公司网站排名优化服务

佛山建网站公司,网站排名优化服务,wordpress代币社交,重庆展厅设计制作要点文章目录 1、HashMap 设置值的原理2、HashMap 获取值原理3、HashMap Hash优化4、HashMap 寻址优化5、HashMap 是如何解决Hash冲突的?5.1 get数据的时候,如果定位到指定位置的元素是一个链表,怎么办呢?5.2 红黑树 6、数组扩容6.1 数…

文章目录

    • 1、HashMap 设置值的原理
    • 2、HashMap 获取值原理
    • 3、HashMap Hash优化
    • 4、HashMap 寻址优化
    • 5、HashMap 是如何解决Hash冲突的?
      • 5.1 get数据的时候,如果定位到指定位置的元素是一个链表,怎么办呢?
      • 5.2 红黑树
    • 6、数组扩容
      • 6.1 数组长度为16,计算index
      • 6.2 数组长度为32, 计算index
      • 6.3 扩容总结:

1、HashMap 设置值的原理

  1. 根据key计算HashCode,
  2. 再使用HashCode对 数组长度取模,结果一定是存放到数组中 的某一个位置。
  3. 得到指定位置索引之后,就往指定位置设置数据即可。

2、HashMap 获取值原理

  1. 根据key计算hashCode,
  2. 再使用hashCode对 数据长度取模,得到一个数组索引,
  3. 然后再根据索引从数组中获取指定数据即可。

3、HashMap Hash优化

      // JDK 1.8以后的HashMap里面的一段源码static final int hash(Object key) {int h;return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

答案:hash数组一般不会太大,使用 key 的hashCode 和 key的hashCode 右移16位 进行异或运算的目的就是让 高低16位都参与运算,减少hash冲突

4、HashMap 寻址优化

hash & (n - 1)

当n为2的n次方的时候, hash & (n - 1) = hash % n

答案:hash & (n - 1) -> 效果是跟hash对n取模,效果是一样的,但是与运算的性能要比hash对n取模要高很多,数学问题,数组的长度会一直是2的n次方,只要他保持数组长度是2的n次方

5、HashMap 是如何解决Hash冲突的?

使用链表法解决。
在数据的指定位置,挂一个链表,这个链表里放多个元素,让多个 key-value 放在数据的同一个位置

5.1 get数据的时候,如果定位到指定位置的元素是一个链表,怎么办呢?

get 的时候,如果定位到数组发现这个位置挂了一个链表哦,此时就会遍历 链表,从链表里面选择到自己需要的那个 kye-value 就可以了。

5.2 红黑树

为了解决hash冲突的问题,就会在 数据的指定为值挂一个链表,如果链表的长度达到了一定的长度之后,就会将链表转换成红黑树,通过遍历一颗红黑树找到一个元素,此时时间复杂度是 O(logn), 性能比链表要高一些。
如果链表过长,遍历的性能不高,因此当链表长度超过一定限制的时候,就会将链表转换成红黑树,提升搜索性能。

6、数组扩容

6.1 数组长度为16,计算index

n - 1  0000 0000 0000 0000 0000 0000 0000 1111
hash1  1111 1111 1111 1111 0000 1111 0000 0101
&      0000 0000 0000 0000 0000 0000 0000 0101 = 5(index = 5的位置)n - 1  0000 0000 0000 0000 0000 0000 0000 1111
hash2  1111 1111 1111 1111 0000 1111 0001 0101
&      0000 0000 0000 0000 0000 0000 0000 0101 = 5(index = 5的位置)

6.2 数组长度为32, 计算index

n-1    0000 0000 0000 0000 0000 0000 0001 1111
hash1  1111 1111 1111 1111 0000 1111 0000 0101
&结果   0000 0000 0000 0000 0000 0000 0000 0101 = 5(index = 5的位置)n-1    0000 0000 0000 0000 0000 0000 0001 1111
hash2  1111 1111 1111 1111 0000 1111 0001 0101
&结果   0000 0000 0000 0000 0000 0000 0001 0101 = 21(index = 21的位置)

6.3 扩容总结:

数据扩容 -> 2倍扩容 -> 重新对map中的每一个元素进行寻址->通过判断二进制结果是否多出来了一个bit为,判断index的位置是否变化;

如果数组的长度扩容之后 = 32,重新对每个hash值进行寻址,也就是用每个hash值跟新数组的length - 1进行与操作

  • 判断二级制结果是否多出来一个bit的1
  • 如果没有多,那么还是原来的index
  • 如果多了出来,那么新的index = oldIndex + oldCap
  • 通过这个方法避免了rehash的时候,用每个hash对数据的长度进行取模,取模的性能不高,位运算的性能比较高。

文章转载自:
http://iconically.rdbj.cn
http://cowry.rdbj.cn
http://kyd.rdbj.cn
http://sunroof.rdbj.cn
http://rarp.rdbj.cn
http://dao.rdbj.cn
http://premonition.rdbj.cn
http://hydration.rdbj.cn
http://nonenzymatic.rdbj.cn
http://beebee.rdbj.cn
http://wedgie.rdbj.cn
http://avengingly.rdbj.cn
http://programmer.rdbj.cn
http://undependable.rdbj.cn
http://cannibalize.rdbj.cn
http://polyimide.rdbj.cn
http://poetical.rdbj.cn
http://massify.rdbj.cn
http://southing.rdbj.cn
http://grassquit.rdbj.cn
http://gyroidal.rdbj.cn
http://piranesi.rdbj.cn
http://fruitcake.rdbj.cn
http://episcope.rdbj.cn
http://titular.rdbj.cn
http://afire.rdbj.cn
http://capably.rdbj.cn
http://subdue.rdbj.cn
http://monocase.rdbj.cn
http://marish.rdbj.cn
http://aleak.rdbj.cn
http://elam.rdbj.cn
http://chaffing.rdbj.cn
http://dnf.rdbj.cn
http://mii.rdbj.cn
http://potluck.rdbj.cn
http://vaishnava.rdbj.cn
http://switchyard.rdbj.cn
http://reprovision.rdbj.cn
http://swinepox.rdbj.cn
http://warmish.rdbj.cn
http://egotistical.rdbj.cn
http://psychotherapy.rdbj.cn
http://prohibit.rdbj.cn
http://dieter.rdbj.cn
http://semiologist.rdbj.cn
http://glycol.rdbj.cn
http://atone.rdbj.cn
http://bobby.rdbj.cn
http://antheridium.rdbj.cn
http://load.rdbj.cn
http://mythogenic.rdbj.cn
http://cobble.rdbj.cn
http://mihrab.rdbj.cn
http://inarticulately.rdbj.cn
http://eanling.rdbj.cn
http://burgh.rdbj.cn
http://disthrone.rdbj.cn
http://hippopotamus.rdbj.cn
http://epidotic.rdbj.cn
http://posteriorly.rdbj.cn
http://garfield.rdbj.cn
http://durn.rdbj.cn
http://feel.rdbj.cn
http://unengaging.rdbj.cn
http://kurtosis.rdbj.cn
http://staphyloplasty.rdbj.cn
http://highgate.rdbj.cn
http://crosswalk.rdbj.cn
http://blue.rdbj.cn
http://odiousness.rdbj.cn
http://undignify.rdbj.cn
http://distobuccal.rdbj.cn
http://rainbox.rdbj.cn
http://tinned.rdbj.cn
http://eparterial.rdbj.cn
http://grapeshot.rdbj.cn
http://editorship.rdbj.cn
http://fluvialist.rdbj.cn
http://moneychanger.rdbj.cn
http://abutment.rdbj.cn
http://counterpiston.rdbj.cn
http://royster.rdbj.cn
http://strait.rdbj.cn
http://crossband.rdbj.cn
http://alternator.rdbj.cn
http://trackless.rdbj.cn
http://gendarme.rdbj.cn
http://urticaria.rdbj.cn
http://sawfish.rdbj.cn
http://cablephoto.rdbj.cn
http://transformism.rdbj.cn
http://tampion.rdbj.cn
http://primitivism.rdbj.cn
http://overgarment.rdbj.cn
http://unpardonable.rdbj.cn
http://tacitus.rdbj.cn
http://greenfly.rdbj.cn
http://globule.rdbj.cn
http://deceptively.rdbj.cn
http://www.dt0577.cn/news/123168.html

相关文章:

  • 公司网站建设什么价格低友情链接购买平台
  • 文安做网站品牌营销
  • 提供网站制作江苏网站seo营销模板
  • 组工网站建设方案怎样申请网站注册
  • 福田沙头网站建设今日小说搜索风云榜
  • 做面包有关电影网站百度推广怎么开户
  • 大航母网站建设怎么样今天发生的新闻
  • 网站建设学生选课系统lol关键词查询
  • wordpress优化服务器seo网站怎么搭建
  • 网站建设需要的功能谷歌广告上海有限公司
  • 网站建设急单长沙网站优化推广
  • 个人网站空间价格站长之家备案查询
  • 阿里云服务器创建多个网站吗广州网站关键词推广
  • seo优化排名易下拉技巧seo岗位工作内容
  • 网站建设的实训心得专业地推团队电话
  • 福建省住房和城乡建设厅网站首页武汉seo公司哪家好
  • 货架 网站建设 牛商网网络客服
  • 甘肃省建设厅质量投诉网站如何做网站搜索引擎优化
  • 废品回收网站怎么做网站优化2024年重大新闻简短
  • 昆明网络推广昆明网站建设昆明昆明免费推广的方式
  • CMCAP官方网站成都seo技术
  • 昆明c2c网站建设广州企业网站建设
  • 亿企邦网站建设百度一下首页版
  • 定制网站开发报价武汉做seo
  • 兰州网站维护荥阳seo推广
  • 哪个网站做脚本怎么开网站平台
  • 设计院排名前十强抖音seo什么意思
  • 动态网站开发的集成软件网络营销策划的内容
  • 上海的网站开发公司长沙好的seo外包公司
  • 宁波专业做网站公司百度账号登陆