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

无极分期网站网站开发实验报告可行性分析

无极分期网站,网站开发实验报告可行性分析,制作一个网站平台,如何设计小程序第一题. HashMap和HashTable有什么区别#xff1f;其底层实现是什么#xff1f; 区别 #xff1a; HashMap⽅法没有synchronized修饰#xff0c;线程⾮安全#xff0c;HashTable线程安全#xff1b;HashMap允许key和value为null#xff0c;⽽HashTable不允许 底层实现… 第一题. HashMap和HashTable有什么区别其底层实现是什么 区别 HashMap⽅法没有synchronized修饰线程⾮安全HashTable线程安全HashMap允许key和value为null⽽HashTable不允许 底层实现数组链表实现jdk8开始链表⾼度到8、数组⻓度超过64链表转变为红⿊树元素以内部类Node节点存在 3. 计算key的hash值⼆次hash然后对数组⻓度取模对应到数组下标 4. 如果没有产⽣hash冲突(下标位置没有元素)则直接创建Node存⼊数组 5. 如果产⽣hash冲突先进⾏equal⽐较相同则取代该元素不同则判断链表⾼度插⼊链表链表⾼度达到8并且数组⻓度到64则转变为红⿊树⻓度低于6则将红⿊树转回链表 6. key为null存在下标0的位置 第二题.谈谈ConcurrentHashMap的扩容机制 1.7版本 1.7版本的ConcurrentHashMap是基于Segment分段实现的每个Segment相对于⼀个⼩型的HashMap每个Segment内部会进⾏扩容和HashMap的扩容逻辑类似先⽣成新的数组然后转移元素到新数组中扩容的判断也是每个Segment内部单独判断的判断是否超过阈值 1.8版本 6. 1.8版本的ConcurrentHashMap不再基于Segment实现 7. 当某个线程进⾏put时如果发现ConcurrentHashMap正在进⾏扩容那么该线程⼀起进⾏扩容 8. 如果某个线程put时发现没有正在进⾏扩容则将key-value添加到ConcurrentHashMap中然后判断是否超过阈值超过了则进⾏扩容 9. ConcurrentHashMap是⽀持多个线程同时扩容的 10. 扩容之前也先⽣成⼀个新的数组 11. 在转移元素时先将原数组分组将每组分给不同的线程来进⾏元素的转移每个线程负责⼀组或多组的元素转移⼯作 第三题. Jdk1.7到Jdk1.8 HashMap 发⽣了什么变化(底层)? 1.7中底层是数组链表1.8中底层是数组链表红⿊树加红⿊树的⽬的是提⾼HashMap插⼊和查询整体效率1.7中链表插⼊使⽤的是头插法1.8中链表插⼊使⽤的是尾插法因为1.8中插⼊key和value时需要判断链表元素个数所以需要遍历链表统计链表元素个数所以正好就直接使⽤尾插法1.7中哈希算法⽐较复杂存在各种右移与异或运算1.8中进⾏了简化因为复杂的哈希算法的⽬的就是提⾼散列性来提供HashMap的整体效率⽽1.8中新增了红⿊树所以可以适当的简化哈希算法节省CPU资源 第四题. 说⼀下HashMap的Put⽅法 先说HashMap的Put⽅法的⼤体流程 根据Key通过哈希算法与与运算得出数组下标如果数组下标位置元素为空则将key和value封装为Entry对象JDK1.7中是Entry对象JDK1.8中 是Node对象并放⼊该位置如果数组下标位置元素不为空则要分情况讨论 如果是JDK1.7则先判断是否需要扩容如果要扩容就进⾏扩容如果不⽤扩容就⽣成Entry 对象并使⽤头插法添加到当前位置的链表中如果是JDK1.8则会先判断当前位置上的Node的类型看是红⿊树Node还是链表Node 如果是红⿊树Node则将key和value封装为⼀个红⿊树节点并添加到红⿊树中去在这个 过程中会判断红⿊树中是否存在当前key如果存在则更新value如果此位置上的Node对象是链表节点则将key和value封装为⼀个链表Node并通过尾插法插⼊到链表的最后位置去因为是尾插法所以需要遍历链表在遍历链表的过程中会判断是否存在当前key如果存在则更新value当遍历完链表后将新链表Node插⼊到链表中插⼊到链表后会看当前链表的节点个数如果⼤于等于8那么则会将该链表转成红⿊树将key和value封装为Node插⼊到链表或红⿊树中后再判断是否需要进⾏扩容如果需要就扩容如果不需要就结束PUT⽅法 第五题. HashMap的扩容机制原理 1.7版本 先⽣成新数组遍历⽼数组中的每个位置上的链表上的每个元素取每个元素的key并基于新数组⻓度计算出每个元素在新数组中的下标将元素添加到新数组中去所有元素转移完了之后将新数组赋值给HashMap对象的table属性 1.8版本 先⽣成新数组遍历⽼数组中的每个位置上的链表或红⿊树如果是链表则直接将链表中的每个元素重新计算下标并添加到新数组中去如果是红⿊树则先遍历红⿊树先计算出红⿊树中每个元素对应在新数组中的下标位置 a. 统计每个下标位置的元素个数 b. 如果该位置下的元素个数超过了8则⽣成⼀个新的红⿊树并将根节点的添加到新数组的对应位置 c. 如果该位置下的元素个数没有超过8那么则⽣成⼀个链表并将链表的头节点添加到新数组的对应位置所有元素转移完了之后将新数组赋值给HashMap对象的table属性 如果我的内容对你有帮助请点赞评论收藏。创作不易大家的支持就是我坚持下去的动力
http://www.zqtcl.cn/news/959634/

相关文章:

  • 桂林网站建设服务电话网页开发基础
  • 企业型网站建设策划网站案例模板
  • 怎么做产品网站wordpress ajax form
  • 智能建站设计开发电子商务网站的主流语言
  • 大型建站公司是干嘛的北京最富裕的三个区
  • 深圳网站建设设计公司苏州营销网站建设公司排名
  • 网站h1标签的应用漯河网站关键词优化
  • 企业做推广哪些网站比较好环球资源网官方网站
  • 没有网站如何做落地页城市门户网站建设
  • 网易梦幻西游手游官方网站下载制作网站谁家做的好
  • 北京网站制作外包如何在易语言上做网站
  • 中国的网站做欧美风广告设计是干什么的
  • 做酱菜网站做网站什么是解析什么是跳转
  • 西安企业网站备案一般得多少天网站建设公司2018
  • 网站建设安全方案许昌正规网站优化公司
  • 厦门 外贸网站一般什么企业需要建站
  • 代理注册公司需要什么条件网络推广优化服务
  • 做淘宝客网站需要备案吗物流企业
  • 珠海正规网站制作系统东莞建站多少钱
  • 做网站框架图哪个在线网站好用中铁三局招聘官网
  • wordpress百度站内搜索wordpress 修改用户名
  • 网络企业网站建设方案做网站大概需要多少费用
  • 网站301是什么意思自动友链网
  • 淘宝客怎么建设自己网站wordpress links插件
  • 深圳设计网站公司网站芜湖网站建设工作室
  • 礼品类网站建设策划方案郑州手机网站制作
  • 江桥做网站wordpress代码高亮插件
  • 合肥网站制作哪家好建设网站培训班
  • 优化站诊断山东大型网站建设
  • 网页设计与制作个人网站网络开发工程师