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

惠州做网站乐云seo网站建设如何插音乐

惠州做网站乐云seo,网站建设如何插音乐,装潢设计公司门头,wordpress下载按钮插件HashMap的底层结构#xff1a; 1.7之前 数组加链表#xff0c;当两个值进行插入的时候 采用头插法进行插入#xff0c;可能会造成死循环 1.8之后 数组加链表/红黑树#xff0c;当两个值进行插入的时候#xff0c;采用尾插法进行插入#xff0c;不会造成死循环 HashMap底…HashMap的底层结构 1.7之前 数组加链表当两个值进行插入的时候 采用头插法进行插入可能会造成死循环 1.8之后 数组加链表/红黑树当两个值进行插入的时候采用尾插法进行插入不会造成死循环 HashMap底层put源码 1.7之前 会先进行判断当前插入的值的key是否为null如果是null 检查数组为0的索引下标位置是否为空如果不是空就会把原来的值取出来放入oldValue返回回去并采用头插法将新put的值放到原来的位置上旧的值放到新值下面。 如果是空就会直接把put的值放入索引下标的位置上。 如果key不为null会根据key调用方法indexFor计算出当前key所要存储的数组的索引下标的值在判断当前下标下是否有元素重复上面的操作 如果有的话还要进行判断当前的key是否存在如果存在就直接覆盖并返回之前的值。 之后将modCount加一为了判断集合在迭代的时候值是否发生了修改 之后就会添加一个新的链表节点添加之前先判断当前的数组用了多少 如果当前已用的数组位置达到了数组长度的0.75并且即将添加位置不为空就会发生扩容机制没有达到会头插法添加元素size1.8之后 会先进行hash运算取出hash值再判断当前hashMap的数组是否为空如果为空初始化数组 判断当前数组索引位置的值是否为空如果为空新建加入一个节点 如果不为空判断当前索引下标位置的元素是否与新put的值的key相同如果相同将值取出来放到e中 如果不相同判断当前索引下标位置的节点是否是树节点如果是去调用树方法去判断 加入节点等 如果不是树节点表示是链表节点进行循环遍历将p.next给e如果e是空的话直接将put进来的值插入到p.next位置并判断是否已经达到了树化阈值 达到了树化阈值了判断数组长度是否达到了64数组长度也达到了进行树化跳出循环 如果e不为空判断e的hash值是否和put进来的值的key的hash一样如果相同直接跳出循环 将e的值放到一个oldValue中进行返回 修改modCount的值进行size进行判断size的值是否达到了扩容情况进行扩容。 HashMap在1.8的时候为什么要转换为红黑树 因为在1.7的时候如果出现hash冲突就会将冲突的数据加入到链表中如果冲突的数据多了链表的数据就会太长这样的话就会造成查询效率下降 红黑树的查询效率大于链表。红黑树的加入是为了解决hash冲突提高查询效率。 树化阈值为什么是8 这涉及到一个泊松分布有人调查过如果阈值达到8的时候造成hash冲突的概率是千万分之一级别冲突的概率就已经很小了 反树化阈值为什么是6 因为如果反树化阈值是8这样不太稳定如果数组的同一节点在加上一个数就会导致进行树化而如果减少一个数就会进行链表化这样来回树化和反树化会导致性能降低 而如果反树化阈值太小很少的数就会导致转换成红黑树完全没必要 加载因子为什么是0.75 这是对时间和空间之间取得一个折中值如果太大了是1的话会导致hash冲突增加降低性能浪费时间 如果太小是0.5的话会导致还有一半的空间没有用就进行扩容浪费空间 hashmap默认初始化大小是多少为什么按照2的幂次方进行扩容 初始化大小是16因为2的幂次方-1是多个1的组合就像1111当获取添加元素到数组的哪一个索引下标的时候用hash码的值和2的幂次方-1进行取余运算因为是取余运算 在相同的位置上hash码值是什么结果就是什么降低了得到同一索引下标的可能性也就降低了hash冲突。 hashmap扩容的条件 当数组中插入元素的长度达到数组的长度*加载因子的时候会进行扩容 当同一个索引下标位置链表的长度达到8并且数组的长度还没有达到64的时候 hashmap是怎么进行扩容的1.7 hashMap的初始化容量如果不是2的幂次方实际初始化容量会是接近自定义初始化容量的最小的2的幂次方 按照原数组长度的2倍进行扩容会将原来的数组的索引下标位置的部分元素转移的原数组索引下标位置加上原数组的长度的位置上 先进行循环遍历要进行转移的数组的索引下标里面在进行循环遍历要转移的数据 将e指向要进行转移的元素将next指向e的下一个元素在将e.next指向要转移的新数组的对应下标位置再将e赋值给新数组的对应索引下标相当于是往下移了一位 再将next的值赋给e再次执行同样的操作。 为什么hashMap在1.7的时候采用头插法在1.8变成了尾插法 因为在高并发情况下在扩容进行数据转移的时候使用头插法可能导致next指向已经转移到新数组的数据再次使用e.next指向新数组索引下标的时候 的是链表上面的元素导致成为一个环造成了死循环。 而使用尾插法不会导致这样的情况。 hashMap里面的key和value可以是空值吗 key和value都可以是空值但是key只能有一个是空值 HashMap是线程安全的吗 不是线程安全的但是可以通过使用Collections的synchronizedMap()变得线程安全也可以使用copyOnWrite变得线程安全 HashMap和HashTable的区别是什么 HashMap是线程不安全的HashTable是线程安全的 HashMap允许Key和Value为空HashTable不允许键或值为空如果键为空会报空指针异常 HashMap遍历的顺序不确定HashTable的遍历顺序是按照插入的顺序进行遍历的 HashMap的性能相对较高一点HashTable的性能相对较低 HashMap和LinkedHashMap的区别 HashMap是无序的获取的顺序和插入顺序不一致LinkedHashMap是有序地获取元素的顺序和插入顺序是一致的 HashMap底层就是数组加链表/红黑树LinkedHashMap的底层是在HashMap的基础上维护了一个双向链表 HashMap和ConcurrentHashMap的区别是什么 HashMap是线程不安全的ConcurrentHashMap是线程安全的 HashMap由于线程不安全所以并发情况下可能导致数据不一致或抛出异常ConcurretHashMap使用了分段锁所以不同的段可以被不同的线程访问提高了并发性 HashMap没有锁要保证线程安全需要再外部加上同步机制ConcurrentHashMap使用了分段式锁 锁得到粒度小 HashMap在扩容时需要重新计算哈希值重新分配元素位置可能会导致链表长度过长影响性能。ConcurrentHashMap在扩容时只需要对某个段进行扩容不会影响其他段减少了扩容带来的性能损耗。
http://www.zqtcl.cn/news/227526/

相关文章:

  • 河北网站建设价格低国内做外单的网站有哪些
  • wordpress Apache升级优化营商环境的意义
  • 单页式网站系统wordpress自定义字段怎么用
  • 南宁网站设计要多少钱修改wordpress中的 功能 小工具
  • 南昌高端网站开发费用表域名价格排行
  • 怎么接网站开发外包中国观鸟记录的网站架构
  • 青海省住房和城乡建设厅的官方网站网站举报能不能查到举报人
  • dw做的网站如何上传云服务器网址生成app一键生成器
  • 山西建设厅网站密钥房山营销型网站建设
  • 网站空间多少钱哪里接单做网站
  • 建设部网站资质人员查询页面设计的对称方法包括哪几种形式
  • 滁州网站建设哪个好点iis发布网站无法访问
  • 网站项目建设的定义百度站长平台清退
  • ip开源网站FPGA可以做点什么建设网站的工作职责
  • 重庆微信网站开发公司建设网站技术标准
  • 网站开发浏览器银川市建设诚信平台网站
  • 找合伙人做红木家具网站建设银行员工学习网站
  • iis的默认网站没有自动启动长春小程序开发制作
  • 佛山住房和城乡建设部网站wordpress 英文主题
  • 零食网站策划书厦门建设网站的公司
  • 自己做的网站怎么发布到网上湖南做网站 干净磐石网络
  • steam网站代做设计公司招聘信息
  • 网站开发 书籍无广告自助建站
  • 青岛电子商务网站建设wordpress购物车会员
  • 大理建网站沉默是金吉他谱
  • 门户网站需要多少费用wordpress的中文插件安装
  • 男做基视频网站怎么做网上直营店网站
  • 网站栏目排序个人站长网站应该如何定位
  • phpcms wap网站搭建学网站开发难吗
  • 做一个网页一般多少钱seo实训思考与总结