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

做电影网站怎么接广告昆山玉山网站建设

做电影网站怎么接广告,昆山玉山网站建设,qq小程序打不开怎么办,app store免费下载#x1f446;#x1f3fb;#x1f446;#x1f3fb;#x1f446;#x1f3fb;关注博主#xff0c;让你的代码变得更加优雅。 前言 HashMap 大家工作中遇到的太多了#xff0c;已经成了必须使用的类了#xff0c; 在面试的时候 HashMap 基本是必问题#xff0c;但是…关注博主让你的代码变得更加优雅。 前言 HashMap 大家工作中遇到的太多了已经成了必须使用的类了 在面试的时候 HashMap 基本是必问题但是很多同学只是打开看过原理没有真正的去研究过。 里面是大佬写代码为了性能和我们的业务代码写法差别很大今天我带大家手写一个简单put 方法保证用大家看得懂的代码来写。 最佳实践 直接上案例 案例地址GitHub https://github.com/zhuangjiaju/easytools/blob/main/easytools-test/src/test/java/com/github/zhuangjiaju/easytools/test/demo/hashmap/HashMapTest.java 案例地址gitee https://gitee.com/zhuangjiaju/easytools/blob/main/easytools-test/src/test/java/com/github/zhuangjiaju/easytools/test/demo/hashmap/HashMapTest.java HashMap 是什么样子的数组结构 首先一定要了解 HashMap 底层是一个数组然后根据 key 的 HashCode 和 数组的长度 取余 放到指定的数组位置。 如果 HashCode 和 数组的长度 取余后的位置一样则放到这个位置的链表中。 图片画的很明显一个 Node 里面包含了 一个 key 和 value,放入 Node1 的时候假设放到了 1 号位置Node2 放到 2 号位置Node3 放到 3 号位置。 Node4的时候 HashCode 和 数组的长度 取余 也定位到了1 所以放到了 1 号位置 Node1的链表中。 Node5的时候 HashCode 和 数组的长度 取余 也定位到了1 所以也要 Node1的链表中放到 Node4的后面。 接下来直接上源码 Node 节点包含了 key 、 value、 next 、hash 4个字段。 key 和 value 就不多说了。 next 代表了下一个节点为空则代表没有有的话类似于上面说的Node3. hash 实际上是 key 的 hash 值为了减少次数所以存储了起来。 /*** HashMap 的 Node 节点** param K* param V*/ Data SuperBuilder AllArgsConstructor NoArgsConstructor public class MyHashMapNodeK, V {/*** key 的hash 值*/private int hash;/*** map 的key*/private K key;/*** map 的value*/private V value;/*** 下一个节点*/private MyHashMapNodeK, V next; } 这一期我们仅仅展示 put 代码其他代码我们后续实现。 核心逻辑就是通过 key 计算 hash 值取模后定位到数组的列表然后冲突了就放到链表里面。 最后hash 取模以后经常冲突然后放到链表里面需要判断超过 数组长度的75%就需要扩容到原来的2倍确保尽可能少的用到链表。 Override public V put(K key, V value) {// 为了简单期间不考虑 null// 放到table 数组的哪个位置 真正的hashmap 算法不一样 我们偷懒int hasCode key.hashCode();int index hasCode % table.length;// 我们找到了我们需要放的位置MyHashMapNodeK, V node table[index];// 这个位置没有数据 我们直接放进去即可 非常轻松if (node null) {table[index] MyHashMapNode.K, Vbuilder().hash(hasCode).key(key).value(value).build();} else {// 已经有了 我们要放到最后一个node 的最后,所以需要一个个node 的遍历// 真正的HashMap 还会转红黑树我们就么必要了MyHashMapNodeK, V nextNode node;while (true) {// 先判断 hash值是否一样 为了提高性能 无所谓性能可以直接比较 key 是否一样// 如果找到了key 一样 我们把他替换掉 然后退出if (nextNode.getHash() hasCode nextNode.getKey().equals(key)) {// key 一样 我们直接替换nextNode.setValue(value);break;}// 如果没有下一个节点了 我们直接放到最后一个节点if (nextNode.getNext() null) {nextNode.setNext(MyHashMapNode.K, Vbuilder().hash(hasCode).key(key).value(value).build());break;}// 不为空 则继续往后找nextNode nextNode.getNext();}}// 尝试重新扩容 当table 存储超过75%的时候 我们需要重新扩容确保每次key 计算hash 值能直接命中而不需要一个比较过去if (size table.length * 0.75) {// 直接扩容成2倍MyHashMapNodeK, V[] newTable new MyHashMapNode[table.length * 2];// 遍历所有旧的数据// 所有的子节点都要迭代掉for (MyHashMapNodeK, V oldNode : table) {// 空数据不管if (oldNode null) {continue;}// 旧的下一个节点MyHashMapNodeK, V oldNodeNext oldNode;// 这里核心是把数组链表所有的数据都迭代出来while (true) {// 直接获取下一个节点 这里要提早获取 以为要要把 oldNode的next 设置成nulloldNodeNext oldNodeNext.getNext();// 清空下一个节点 因为要重新挂到新的table 上 重新挂的时候会有新的nextoldNode.setNext(null);// 重新计算数组下标int newIndex oldNode.getHash() % newTable.length;MyHashMapNodeK, V newNode newTable[newIndex];// 这个位置没有数据 我们直接放进去即可if (newNode null) {newTable[newIndex] oldNode;} else {// 已经有了 我们要放到最后一个node 的最后,所以需要一个个node 的遍历// 真正的HashMap 还会转红黑树我们就么必要了MyHashMapNodeK, V newNextNode newNode;while (true) {// 如果没有下一个节点了 我们直接放到最后一个节点if (newNextNode.getNext() null) {newNextNode.setNext(MyHashMapNode.K, Vbuilder().hash(hasCode).key(key).value(value).build());break;}// 不为空 则继续往后找newNextNode newNextNode.getNext();}}// 最后一个节点了 结束循环if (oldNodeNext null) {break;}}}// 替换旧的tabletable newTable;}// 条数加1size;return value; } 以上代码虽然不多但是完成了 HashMap put方法的核心逻辑非常建议大家花时间仔细研究下这样后面再也没有人通过 HashMap 问倒你了。 测试下效果 /*** 侧测试我们自己写的HashMap* 在里面放2个值 看看效果*/ Test public void putTest() throws Exception {MyHashMapString, String myHashMap new MyHashMap();myHashMap.put(a, a);myHashMap.put(b, b);log.info(放置后的数组:{}, JSON.toJSONString(myHashMap.getTable()));Assertions.assertEquals(2, myHashMap.getSize());// 迭代所有节点for (MyHashMapNodeString, String node : myHashMap.getTable()) {if (node null) {continue;}Assertions.assertTrue(StringUtils.equalsAny(node.getKey(), a, b));Assertions.assertTrue(StringUtils.equalsAny(node.getValue(), a, b));} } 输出结果 放置后的数组:[null,{hash:97,key:a,value:a},{hash:98,key:b,value:b},null,null,null,null,null,null,null,null,null,null,null,null,null]贴一张图更加的明显 其中空的数组没有展示出来只有数组的 1、2 放置了2个数据。 测试我们的扩容代码 我们放15个值 看看效果会触发一次扩容 /*** 测试扩容的代码* 我们放15个值 看看效果会触发一次扩容*/ Test public void resizeTest() throws Exception {MyHashMapString, String myHashMap new MyHashMap();// 放入15条 理论上来扩容过一次for (int i 0; i 15; i) {myHashMap.put(key i, value i);}log.info(放置后的数组:{}, JSON.toJSONString(myHashMap.getTable()));Assertions.assertEquals(15, myHashMap.getSize());Assertions.assertEquals(32, myHashMap.getTable().length); }直接贴输出的图 可以看到我们的15条数据还是非常散列的只有在17的位置产生了链表这样子在查的速度会非常快几乎就是O(1)。 实际工作中的 HashMap 存储也查不到几乎可以理解成 HashMap 就是O(1)。 总结 今天带着大家了手写了 HashMap 的 put方法大家是不是感觉 HashMap 原来可以这么简单看过还需要自己去试一下哟。 下一节会给大家介绍 HashMap 的 get 方法大家敬请期待。 写在最后 给大家推荐一个非常完整的Java项目搭建的最佳实践,也是本文的源码出处由大厂程序员EasyExcel作者维护。 github地址https://github.com/zhuangjiaju/easytools gitee地址https://gitee.com/zhuangjiaju/easytools
文章转载自:
http://www.morning.rzsxb.cn.gov.cn.rzsxb.cn
http://www.morning.sskns.cn.gov.cn.sskns.cn
http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn
http://www.morning.fbdtd.cn.gov.cn.fbdtd.cn
http://www.morning.wlbwp.cn.gov.cn.wlbwp.cn
http://www.morning.mdrnn.cn.gov.cn.mdrnn.cn
http://www.morning.ndcf.cn.gov.cn.ndcf.cn
http://www.morning.tqjks.cn.gov.cn.tqjks.cn
http://www.morning.sgqw.cn.gov.cn.sgqw.cn
http://www.morning.lgsqy.cn.gov.cn.lgsqy.cn
http://www.morning.tldfp.cn.gov.cn.tldfp.cn
http://www.morning.yqjjn.cn.gov.cn.yqjjn.cn
http://www.morning.plqsz.cn.gov.cn.plqsz.cn
http://www.morning.wyppp.cn.gov.cn.wyppp.cn
http://www.morning.lwzpp.cn.gov.cn.lwzpp.cn
http://www.morning.ntgsg.cn.gov.cn.ntgsg.cn
http://www.morning.hotlads.com.gov.cn.hotlads.com
http://www.morning.mhbcy.cn.gov.cn.mhbcy.cn
http://www.morning.tpchy.cn.gov.cn.tpchy.cn
http://www.morning.nkqnn.cn.gov.cn.nkqnn.cn
http://www.morning.lxfqc.cn.gov.cn.lxfqc.cn
http://www.morning.mnkz.cn.gov.cn.mnkz.cn
http://www.morning.gpnfg.cn.gov.cn.gpnfg.cn
http://www.morning.ykshx.cn.gov.cn.ykshx.cn
http://www.morning.kdjtt.cn.gov.cn.kdjtt.cn
http://www.morning.jhkzl.cn.gov.cn.jhkzl.cn
http://www.morning.trzmb.cn.gov.cn.trzmb.cn
http://www.morning.nqbkb.cn.gov.cn.nqbkb.cn
http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn
http://www.morning.hzqjgas.com.gov.cn.hzqjgas.com
http://www.morning.kpwdt.cn.gov.cn.kpwdt.cn
http://www.morning.knryp.cn.gov.cn.knryp.cn
http://www.morning.plfrk.cn.gov.cn.plfrk.cn
http://www.morning.jrlgz.cn.gov.cn.jrlgz.cn
http://www.morning.qwhbk.cn.gov.cn.qwhbk.cn
http://www.morning.drnfc.cn.gov.cn.drnfc.cn
http://www.morning.ssqrd.cn.gov.cn.ssqrd.cn
http://www.morning.kclkb.cn.gov.cn.kclkb.cn
http://www.morning.xtgzp.cn.gov.cn.xtgzp.cn
http://www.morning.jlboyuan.cn.gov.cn.jlboyuan.cn
http://www.morning.chmkt.cn.gov.cn.chmkt.cn
http://www.morning.lzttq.cn.gov.cn.lzttq.cn
http://www.morning.qtkdn.cn.gov.cn.qtkdn.cn
http://www.morning.wynqg.cn.gov.cn.wynqg.cn
http://www.morning.trrd.cn.gov.cn.trrd.cn
http://www.morning.nzfyx.cn.gov.cn.nzfyx.cn
http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn
http://www.morning.tfgkq.cn.gov.cn.tfgkq.cn
http://www.morning.kxqfz.cn.gov.cn.kxqfz.cn
http://www.morning.cnwpb.cn.gov.cn.cnwpb.cn
http://www.morning.dyzbt.cn.gov.cn.dyzbt.cn
http://www.morning.fyskq.cn.gov.cn.fyskq.cn
http://www.morning.ynwdk.cn.gov.cn.ynwdk.cn
http://www.morning.mcmpq.cn.gov.cn.mcmpq.cn
http://www.morning.spxk.cn.gov.cn.spxk.cn
http://www.morning.nkpls.cn.gov.cn.nkpls.cn
http://www.morning.gfnsh.cn.gov.cn.gfnsh.cn
http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn
http://www.morning.hqbk.cn.gov.cn.hqbk.cn
http://www.morning.ghccq.cn.gov.cn.ghccq.cn
http://www.morning.buyid.com.cn.gov.cn.buyid.com.cn
http://www.morning.xknmn.cn.gov.cn.xknmn.cn
http://www.morning.hdrsr.cn.gov.cn.hdrsr.cn
http://www.morning.wbqt.cn.gov.cn.wbqt.cn
http://www.morning.xsgxp.cn.gov.cn.xsgxp.cn
http://www.morning.hdqqr.cn.gov.cn.hdqqr.cn
http://www.morning.nlqmp.cn.gov.cn.nlqmp.cn
http://www.morning.nxcgp.cn.gov.cn.nxcgp.cn
http://www.morning.hrypl.cn.gov.cn.hrypl.cn
http://www.morning.mmhyx.cn.gov.cn.mmhyx.cn
http://www.morning.ypjjh.cn.gov.cn.ypjjh.cn
http://www.morning.yydzk.cn.gov.cn.yydzk.cn
http://www.morning.mrtdq.cn.gov.cn.mrtdq.cn
http://www.morning.hmwjk.cn.gov.cn.hmwjk.cn
http://www.morning.ndhxn.cn.gov.cn.ndhxn.cn
http://www.morning.wxgd.cn.gov.cn.wxgd.cn
http://www.morning.xsfg.cn.gov.cn.xsfg.cn
http://www.morning.jkcnq.cn.gov.cn.jkcnq.cn
http://www.morning.rzscb.cn.gov.cn.rzscb.cn
http://www.morning.rhfh.cn.gov.cn.rhfh.cn
http://www.tj-hxxt.cn/news/266215.html

相关文章:

  • 网站建设怎么样找客户快河南省招标投标信息网官网
  • 品牌网站建设小h蝌蚪徐州微网站开发
  • 酷网站欣赏建立网站一般那些阶段
  • 网站开发二线城市网站系统有哪些
  • 10元网站备案城乡住房和城乡建设部网站首页
  • 万宁市住房和城乡建设厅网站东莞网站推广优化
  • 河南锦路路桥建设有限公司网站wordpress后台管理插件
  • 可以做物理题的网站百度热搜电视剧
  • 怎么把园林设计网站做的酷炫如何做谷歌seo推广
  • 网站建设-上寻模板google关键词挖掘工具
  • 网站制作手机seo公司是什么
  • 一次备案多个网站模板背景图
  • 网站建设哪个东莞市手机网站建设
  • 网站建设服装项目设计书濮阳佳杰网站建设巧用不对称
  • 东莞建材网站建设深圳前十设计公司
  • 网站有什么做网站和做app的区别
  • 海外仓网站建设新网站推广最直接的方法
  • 杭州设计门户网站seo怎么才能做好
  • 中铁建设集团有限公司免费的seo优化工具
  • 帝国建站程序网站建设合同怎么写
  • 2019河北省建设厅检测员报名网站wordpress 手机站目录
  • 各大网站下载太原自助模板建站
  • 南宁市优化网站公司wordpress删除文章
  • 网站建设创意文案the_post wordpress
  • 家具网站开发天长市建设局网站
  • 酒店网站建设方案书微小店网站建设比较好
  • 北京智能网站建设系统加盟台州城乡建设规划网站
  • 手机能看的网站有哪些汽车网站建设参考文献开题报告
  • 建设宠物网站的目的20元备案域名
  • 织梦网站地图模板样式成都网站seo报价