`
- 浏览:
9199 次
- 性别:
- 来自:
长沙
-
在学习了数据结构HashMap之后,自己也定义了一个MyHashMap,下面来解析一下MyHashMap。
1、实质为一个数组
我定义的MyHashMap中所使用的数据结构是一个数组,数据都存储在这个数组中。当然你肯定有疑问,若是用这个数组的话那得要多大的数组才能放下那么大的数据?别急,在下面的内容中我会来解答,o(∩_∩)o ~~
2、Hash函数
作为一种数据结构,那必然是要有存储数据的方法即我自己定义的put方法,它的作用就是根据传入的key将value放在指定的位置,那怎样才能将value放在指定位置呢?这还不简单?数组的下标不就可以作为key,这样不就确定了位置了嘛,用这样的方法处理少量数据或许还可以,但是若处理大批量的数据,那么它的作用那就捉襟见肘了。所以这里需要用到Hash函数,它的作用就是经过一定的计算确定数据存储的位置,我定义的Hash函数是根据key对象的hashcode值然后与数组的长度取余,这样就确定了数据要放在数组的什么位置了,这样定义的数组的长度就可以很小了。但是又生出一个疑问,取余的话必然会有相同的余数,那么怎样存储这两个或多个在数组上位置相同的数据呢?
3、链表数组
既然有多个数据在同一位置上,那么将他们放入另一个容器中,而数组中存储的是这个容器,那么问题就解决了,在MyHashMap中使用的容器是链表,每当有一个数据存进来时,若对应的位置上没有数据,则新建一个结点,将数据存储进去,将结点存储在数组该位置上;若对应的位置上已有数据,则新建一个结点,将数据存储进去,并将该结点作为链表的尾结点。这里也有一个问题,大家都知道一个小链表的查找效率还行,但是一个大链表的查找效率是很低的,随着存储的数据的增加,那必然导致链表变大,那如何才能使其效率不是很低呢?
4、装载因子与rehash
要解决上面的问题需要用到装载因子与rehash,那么什么叫做装载因子与rehash呢?装载因子就是一个限制,它决定了这个数组中能存储多少数据,若是超过这个限制,那么就需要rehash了,在MyHashMap中,设置装载因子为0.7。rehash是对超过装载因子后的Hashmap进行的处理,在MyHashMap中的rehash为新建一个长度为原长度的两倍的数组,并将原数组中的数据重新经过hash函数计算,存储进新的数组中。其实这里也体现了MyHashMap的弊端,大数据转移时这个操作的效率很低。
5、总结
MyhashMap实质为一个链表数组,根据hash函数来存储数据,根据装载因子来确定是否要进行rehash。而弊端则是在将原数组数据转移到新数组时的效率低。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
局部变量 数据结构, 数据结构 .局部变量 标题, 文本型 标题 = 到文本 (取结构尺寸_GlobalSize (数据结构)) 调试输出 (标题) .子程序 取自定义数据长度_LocalSize .局部变量 数据结构, 数据结构 .局部变量 标题, ...
易语言学习调用DLL返回自定义数据结构的方法源码,test,测试子程序,RtlMoveMemory,取指针到字节集
VB、C与C++、C#.NET中自定义数据值结构的比较与应用。
精彩编程与编程技巧-VB自定义数据结构的传输转换 ...
易语言源码易语言自定义数据类型与字节集转换源码.rar 易语言源码易语言自定义数据类型与字节集转换源码.rar 易语言源码易语言自定义数据类型与字节集转换源码.rar 易语言源码易语言自定义数据类型与字节集转换...
本资源 为SQL脚本文件 上面的代码可以让你很快明白oracle的自定义结构和表类型的使用方法,相信不会让你失望的。资源附实验报告。
实现了一个自定义的数据结构 —— 树,该自定义结构不同于二叉树及其他数据结构,每个节点的子节点个数不受限制,最大限度保留了数据的原始结构,并实现了其前序和后序遍历的方法。优点是节省了内存,但缺点则是基于...
VB 之 精 彩 编 程-VB自定义数据结构的传输转换
springboot工程通过自定义response注解、java反射机制、自定义java拦截器、自定义功能类实现WebMvcConfigurer接口等功能,实现自定义规范化返回数据结构。
易语言自定义数据类型变量保存源码,自定义数据类型变量保存,CLSave
“SIGNALS_USER(1,0)”,里面是“1”就是自定义数据管理器里面的编号,就是通过这个函数来链接外部自定义数据的,需要用到哪些数据,我们就更改相应的数据编号就行,STICKLINE和DRAWTEXT函数一个是显示指标上显示...
1:支持自定义数据类型中嵌套自定义数据类型。2:支持自定义数据类型 基本类型数组。3:不支持自定义数据类型中嵌套自定义数据类型数组,注意,是不支持 。这东西能干嘛呢?。一般可以用来直接保存/还原自定义数据类型。...
易语言取自定义数据类型大小源码,取自定义数据类型大小,取内存块大小_
/*自定义的数据结构类*/ 知道如何实现一个比如星际地图文件之类的自定义的文件数据库吗? 知道Delphi的接口是如何使用吗? 知道如何让自己保存的数据不让别人偷看和修改吗? 知道如何教好的使用面向对象吗? 知道...
网上实现自定义数据结构时间接使用了其他高级的结构,本次我仅仅使用了数组实现了泛型 stack queue dictionary 三种数据结构,且实现了IEnumerable 接口。
将龙虎榜中的,顶级游资,活跃游资,知名游资,做自定义数据关注,不活跃的不做轨迹关注! 1.导入一下顶级游资轨迹指标,方便后面调用进来的数据!并且打开一个通达信软件!! 2.将模块初始化,自动建立顶级游资...
大智慧新一代数据管理 大智慧新一代里有3种数据扩展方式,分别是附加数据、扩展数据和自定义数据。 附加数据 是由服务器提供,客户端请求获得的,他有3种形式: 1、股票相关序列值,比如散户线,引用方式EXTRADATA('...
易语言内存自定义数据类型源码,内存自定义数据类型,WriteProcessMemory,VirtualAllocEx,RtlMoveMemory,GetCurrentProcess,LocalSize
易语言自定义数据类型数组排序源码,自定义数据类型数组排序,更新超级列表框,取随机品名,根据产地排序,根据类别排序,根据售价排序
火山PC类似易语言的自定义数据类型结构体案例