用h5开发的网站模板网站建设后台管理实训报告

web/2025/9/26 20:02:00/文章来源:
用h5开发的网站模板,网站建设后台管理实训报告,网站首页设计布局,图文制作appEntry中的hash属性为什么不直接使用key的hashCode()返回值呢#xff1f; 不管是JDK1.7还是JDK1.8中#xff0c;都不是直接用key的hashCode值直接与table.length-1计算求下标的#xff0c;而是先对key的hashCode值进行了一个运算#xff0c;JDK1.7和JDK1.8关于hash()的实现…Entry中的hash属性为什么不直接使用key的hashCode()返回值呢 不管是JDK1.7还是JDK1.8中都不是直接用key的hashCode值直接与table.length-1计算求下标的而是先对key的hashCode值进行了一个运算JDK1.7和JDK1.8关于hash()的实现代码不一样但是不管怎么样都是为了提高hash code值与 (table.length-1)的按位与完的结果尽量的均匀分布。 JDK1.7 final int hash(Object k) {int h hashSeed;if (0 ! h k instanceof String) {return sun.misc.Hashing.stringHash32((String) k);}h ^ k.hashCode();h ^ (h 20) ^ (h 12);return h ^ (h 7) ^ (h 4);}JDK1.8 static final int hash(Object key) {int h;return (key null) ? 0 : (h key.hashCode()) ^ (h 16);}虽然算法不同但是思路都是将hashCode值的高位二进制与低位二进制值进行了异或然高位二进制参与到index的计算中。 为什么要hashCode值的二进制的高位参与到index计算呢 因为一个HashMap的table数组一般不会特别大至少在不断扩容之前那么table.length-1的大部分高位都是0直接用hashCode和table.length-1进行运算的话就会导致总是只有最低的几位是有效的那么就算你的hashCode()实现的再好也难以避免发生碰撞这时让高位参与进来的意义就体现出来了。它对hashcode的低位添加了随机性并且混合了高位的部分特征显著减少了碰撞冲突的发生。 HashMap是如何决定某个key-value存在哪个桶的呢 因为hash值是一个整数而数组的长度也是一个整数有两种思路 ①hash 值 % table.length会得到一个[0,table.length-1]范围的值正好是下标范围但是用%运算效率没有位运算符高。 ②hash 值 (table.length-1)任何数 (table.length-1)的结果也一定在[0, table.length-1]范围。 JDK1.7 static int indexFor(int h, int length) {// assert Integer.bitCount(length) 1 : length must be a non-zero power of 2;return h (length-1); //此处h就是hash }JDK1.8 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) {NodeK,V[] tab; NodeK,V p; int n, i;if ((tab table) null || (n tab.length) 0)n (tab resize()).length;if ((p tab[i (n - 1) hash]) null) // i (n - 1) hashtab[i] newNode(hash, key, value, null);//....省略大量代码 }为什么要保持table数组一直是2的n次幂呢 因为如果数组的长度为2的n次幂那么table.length-1的二进制就是一个高位全是0低位全是1的数字这样才能保证每一个下标位置都有机会被用到。 举例1 hashCode值是 table.length是10 table.length-1是9 ???????? 9 00001001 _____________00000000 [0]00000001 [1]00001000 [8]00001001 [9]一定[0]~[9]举例2 hashCode值是 table.length是16 table.length-1是15 ???????? 15 00001111 _____________00000000 [0]00000001 [1]00000010 [2]00000011 [3]...00001111 [15]范围是[0,15]一定在[0,table.length-1]范围内解决[index]冲突问题 虽然从设计hashCode()到上面HashMap的hash()函数都尽量减少冲突但是仍然存在两个不同的对象返回的hashCode值相同或者hashCode值就算不同通过hash()函数计算后得到的index也会存在大量的相同因此key分布完全均匀的情况是不存在的。那么发生碰撞冲突时怎么办 JDK1.8之间使用数组链表的结构。 JDK1.8之后使用数组链表/红黑树的结构。 即hash相同或hash(table.lengt-1)的值相同那么就存入同一个“桶”table[index]中使用链表或红黑树连接起来。 为什么JDK1.8会出现红黑树和链表共存呢 因为当冲突比较严重时table[index]下面的链表就会很长那么会导致查找效率大大降低而如果此时选用二叉树可以大大提高查询效率。 但是二叉树的结构又过于复杂占用内存也较多如果结点个数比较少的时候那么选择链表反而更简单。所以会出现红黑树和链表共存。 加载因子的值大小有什么关系 如果太大threshold就会很大那么如果冲突比较严重的话就会导致table[index]下面的结点个数很多影响效率。 如果太小threshold就会很小那么数组扩容的频率就会提高数组的使用率也会降低那么会造成空间的浪费。 什么时候树化什么时候反树化 static final int TREEIFY_THRESHOLD 8;//树化阈值 static final int UNTREEIFY_THRESHOLD 6;//反树化阈值 static final int MIN_TREEIFY_CAPACITY 64;//最小树化容量当某table[index]下的链表的结点个数达到8并且table.length64那么如果新Entry对象还添加到该table[index]中那么就会将table[index]的链表进行树化。 当某table[index]下的红黑树结点个数少于6个此时 当继续删除table[index]下的树结点最后这个根结点的左右结点有null或根结点的左结点的左结点为null会反树化当重新添加新的映射关系到map中导致了map重新扩容了这个时候如果table[index]下面还是小于等于6的个数那么会反树化 package com.atguigu.map;public class MyKey{int num;public MyKey(int num) {super();this.num num;}Overridepublic int hashCode() {if(num20){return 1;}else{final int prime 31;int result 1;result prime * result num;return result;}}Overridepublic boolean equals(Object obj) {if (this obj)return true;if (obj null)return false;if (getClass() ! obj.getClass())return false;MyKey other (MyKey) obj;if (num ! other.num)return false;return true;}} package com.atguigu.map;import org.junit.Test;import java.util.HashMap;public class TestHashMapMyKey {Testpublic void test1(){//这里为了演示的效果我们造一个特殊的类这个类的hashCode方法返回固定值1//因为这样就可以造成冲突问题使得它们都存到table[1]中HashMapMyKey, String map new HashMap();for (int i 1; i 11; i) {map.put(new MyKey(i), valuei);//树化演示}}Testpublic void test2(){HashMapMyKey, String map new HashMap();for (int i 1; i 11; i) {map.put(new MyKey(i), valuei);}for (int i 1; i 11; i) {map.remove(new MyKey(i));//反树化演示}}Testpublic void test3(){HashMapMyKey, String map new HashMap();for (int i 1; i 11; i) {map.put(new MyKey(i), valuei);}for (int i 1; i 5; i) {map.remove(new MyKey(i));}//table[1]下剩余6个结点for (int i 21; i 100; i) {map.put(new MyKey(i), valuei);//添加到扩容时反树化}} } key-value中的key是否可以修改 key-value存储到HashMap中会存储key的hash值这样就不用在每次查找时重新计算每一个Entry或NodeTreeNode的hash值了因此如果已经put到Map中的key-value再修改key的属性而这个属性又参与hashcode值的计算那么会导致匹配不上。 HUANGANHE 这个规则也同样适用于LinkedHashMap、HashSet、LinkedHashSet、Hashtable等所有散列存储结构的集合。 JDK1.7中HashMap的循环链表是怎么回事如何解决 避免HashMap发生死循环的常用解决方案 多线程环境下使用线程安全的ConcurrentHashMap替代HashMap推荐多线程环境下使用synchronized或Lock加锁但会影响性能不推荐多线程环境下使用线程安全的Hashtable替代性能低不推荐 HashMap死循环只会发生在JDK1.7版本中主要原因头插法链表多线程并发扩容。 在JDK1.8中HashMap改用尾插法解决了链表死循环的问题。 补 JDK7当插入数据达到容量*负载因子时会对底层数组进行扩容然后再通过头插法进行数据插入在多线程的情况下会出现循环链表的情况JDK8则是在通过尾插法进行数据插入之后再对底层数组进行扩容在多线程的情况下也能避免链表死循环的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站简历文字如何空行房产机构网站建设

teamcity您可以通过几种方式检索TeamCity工件? 我说有很多选择 ! 如果您使用的是Java构建工具,那么可以使用简单的HTTP请求,Ant Ivy,Gradle和Maven下载和使用TeamCity构建配置产生的二进制文件。 怎么样? …

html5单页网站设计家官网下载

1管理员功能模块 管理员登录,通过填写用户名、密码、角色进行登录,如图1所示。 图1管理员登录界面图 管理员登录进入简历系统可以查看首页、个人中心、用户管理、简历模板管理、模板类型管理、招聘会管理、报名招聘管理、简历上传管理、求职论坛、我的收…

jsp做网站的书自己能不能做个网站

2021年山西卫生资格考试成绩查询 由中国卫生人才网考试快讯提供,以及提供2021国家卫生资格成绩查询考试信息。更多关于2021年山西卫生资格考试成绩查询 ,卫生资格考试,2021卫生资格考试,卫生资格成绩快讯的内容,请关注国家卫生资格考试网!!20…

中国建筑招聘官方网站django做的网站有哪些

发布时间:2017-09-25我的世界惊现全新无限刷物品bug 服主大大都要注意了.那今天给大家分享一个玩家无意间发现的新的无限刷物品bug,而且还是在服务器中哦!那感兴趣的玩家不妨进来看看哦! 在一个rpg服务器玩 开小号召唤boss的时候发现的. ...标签:我的世界…

陕西网站推广公司wordpress积分系统

软件介绍 Alien Skin Exposure 7是一款超好用的PS胶片效果调色滤镜,它为数码照片提供胶片的曝光,还包括模仿胶片的颗粒感,并且可以控制胶片颗粒的分布,能够帮助用户对图片进行更好的处理! 软件特色 1、支持RAW格式&a…

绵阳网站建设公司如何网站防止采集

四个阶段 1、面向过程 面向过程的软件开发是一种基于任务和流程的开发方法。该方法主要关注程序的输入、处理和输出过程,强调在程序中将整个过程分解为一系列步骤,并通过这些步骤进行数据处理和算法操作,以实现预期的功能。此方法通常借助流…

永久免费影视建站程序物流平台

1.简介 在许多情况下,使用隐式锁定就足够了。 有时,我们将需要更复杂的功能。 在这种情况下, java.util.concurrent.locks包为我们提供了锁定对象。 当涉及到内存同步时,这些锁的内部机制与隐式锁相同。 区别在于显式锁提供了其他…

网站推广网站嘉定网站设计制作价格

实验五 Branch-Target Buffers 本次实验的主要目的是加深对Branch-Target Buffers的理解。掌握使用Branch-Target Buffers减少或增加分支带来的延迟的情况。 实验内容: 将以下程序段修改为可利用WinMIPS64模拟器运行的程序。假设R3的初始值为R240 在使用forward…

企业网站如何进行seowordpress一键登录

1.摘要 本文介绍了一个基于人脸识别技术的发型推荐系统的实现与分析。该系统利用Python编程语言和相关库,结合Face人脸识别API,实现了用户上传照片后的性别识别、脸型分析和发型推荐功能。首先,用户通过Tkinter GUI界面选择上传照片&#xff…

资源网站搭建重庆网址大全

文章目录1. 训练,验证,测试集2. 偏差,方差3. 机器学习基础4. 正则化5. 为什么正则化预防过拟合6. dropout(随机失活)正则化7. 理解 dropout8. 其他正则化9. 归一化输入10. 梯度消失 / 梯度爆炸11. 神经网络权重初始化1…

网站诊断案例能自己做二次元人物的网站

文章目录 表级锁和行级锁了解吗?有什么区别?行级锁使用有什么注意事项?InnoDB有哪几类行锁?共享锁和排他锁是什么?意向锁有什么用? 锁是一种常见的并发事务的控制方式 表级锁和行级锁了解吗?有什…

查 网站接入服务提供者名称大冶市城乡建设局网站

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件,由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能,可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…

天津建设网网站打不开网站建设和建议

本文主要是介绍python图形界面上的按键与实际功能的对接,其实编程掌握了基础之后的学习应该都是靠自己去挖掘其他的在网上发现多半教程都是2的,故本文使用的是python3.5,其实也没什么区别,就有一些支持库改变而已首先我们使用pyth…

潍坊公司网站制作网络平台推广广告费用

近期使用加密狗对软件进行加密,但是软件用的c#,这就比较坑了,因为c#自带的System.Security.Cryptography只支持c#格式的公钥加密私钥解密,而现在需要私钥加密公钥解密。于是网上进行资料查找,一堆资料说的都是使用Boun…

广州定制型网站建设建个商场网站

Sqoop是一个用于在Hadoop和关系型数据库之间传输数据的开源工具。它可以将结构化数据从关系型数据库(如MySQL、Oracle、SQL Server等)导入到Hadoop的分布式文件系统(HDFS)或hive中,并且可以将数据从HDFS、hive导出到关…

国内最好的网站建设cdr 做网站

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…

做ae动图的网站中秋节网页设计素材

分享一种开发中遇到的比较方便的表格高度自适应方案 template代码 <div class"page"><div class"table_wrap"><el-table></el-table></div> </div>css代码 将el-table设置为绝对定位&#xff0c;相对于父元素定位且…

建设部住房城乡建设厅网站我国大宗商品交易所

课程地址和说明 线性代数实现p4 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 本节是第二篇 矩阵计算 矩阵的导数运算 此处参考了视频&#xff1a;矩阵的导数运算 为了方便看出区别&#xff0c;我将所有的向量…

开一个网站建设公司需要什么网站建设后台实训体会

笔记目录 渗透测试工具(1)wireshark渗透测试工具(2)Nmap渗透测试工具(3)BurpsuiteAWD比赛(1)AWD入门攻略大纲 1.工具简介 (1)定义 ①功能 网络扫描和嗅探工具包&#xff0c;三个主要基本功能&#xff1a; 探测一组主机是否在线 扫描主机端口、嗅探所提供的网络服务 推断出主…

微信公众号要钱吗自动优化网站建设咨询

了解数据结构的人应该都听说过哈希表这种数据结构&#xff0c;它是一种典型的利用键值对存储并检索数据的一种非线性结构&#xff0c;又称散列表或杂凑法。在一般的线性表结构中&#xff0c;数据的相对位置是随机的&#xff0c;即数据和用于检索的关键字之间不存在确定的关系&a…