`
Java.天道2011
  • 浏览: 9469 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

自定义数据结构—MyHashMap

阅读更多
       在学习了数据结构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。而弊端则是在将原数组数据转移到新数组时的效率低。
分享到:
评论

相关推荐

    VB C/C++ C#中自定义数据结构源码

    在编程领域,自定义数据结构是提升程序效率和可维护性的重要工具。VB(Visual Basic)、C/C++以及C#都是广泛使用的编程语言,它们各自提供了不同的方式来创建和使用自定义数据结构。本篇文章将深入探讨这三种语言中...

    易语言学习调用DLL返回自定义数据结构的方法

    本篇将深入探讨如何使用易语言来调用DLL并处理返回的自定义数据结构。 易语言是一款基于中文编程的软件开发工具,其语法简洁明了,适合初学者快速上手。在易语言中,调用DLL主要通过“系统呼叫”或“动态调用”命令...

    VB自定义数据结构的传输转换...

    本文将深入探讨VB中自定义数据结构的传输转换技术,这一主题在《VB之精彩编程-VB自定义数据结构的传输转换》一文中被详细阐述,通过源代码示例展示了如何在不同场景下实现自定义数据结构的有效转换。 ### 自定义...

    类似protobuf的自定义数据结构

    标题中的“类似protobuf的自定义数据结构”指的是Google开源的Protocol Buffers(protobuf)技术,它是一种高效的数据序列化协议,常用于结构化数据的存储和通信。protobuf提供了一种方式来定义数据结构,然后可以...

    oracle 自定义数据结构和表类型实验

    在Oracle数据库系统中,自定义数据结构和表类型是数据库设计和开发的重要组成部分。这些特性允许用户根据业务需求创建特定的数据存储解决方案,提高数据管理的灵活性和效率。本实验主要探讨了如何在Oracle中实现...

    易语言自定义数据类型变量保存

    在易语言中,自定义数据类型是实现复杂数据结构和逻辑的关键部分。自定义数据类型允许用户根据需求定义自己的数据结构,比如组合多个基本数据类型,形成新的复合类型。 本案例"易语言自定义数据类型变量保存"主要...

    易语言取自定义数据类型大小

    自定义数据类型可以组合多个基本数据类型,形成一个复合的数据结构,方便处理复杂的数据。 创建自定义数据类型的语法通常如下: ```易语言 .结构 结构名 .字段1 数据类型 .字段2 数据类型 ... .结束结构 ``` ...

    易语言自定义数据类型的内存存储方式

    在易语言中,自定义数据类型是一种重要的编程概念,它允许程序员根据需求定义自己的数据结构,比如组合多种基本数据类型,形成复合型的数据结构。本文将深入探讨易语言中自定义数据类型的内存存储方式及其相关知识点...

    自定义数据结构——树 v1.1.zip

    实现了一个自定义的数据结构 —— 树,该自定义结构不同于二叉树及其他数据结构,每个节点的子节点个数不受限制,最大限度保留了数据的原始结构,并实现了其前序和后序遍历的方法。优点是节省了内存,但缺点则是基于...

    自定义数据结构

    在编程领域,自定义数据结构是提升代码效率和灵活性的重要手段。本文将深入探讨如何仅通过数组实现泛型的Stack(栈)、Queue(队列)和Dictionary(字典)这三种基本数据结构,并且实现IEnumerable接口,使得这些...

    springboot工程自定义response注解、自定义规范化返回数据结构

    在Spring Boot中,可以创建一个自定义注解,例如`@CustomResponse`,用于标记控制器方法,指示该方法应返回特定的数据结构。这个注解通常会包含一些元信息,如状态码、消息等,以便在处理过程中填充到返回结果中。...

    delphi 自定义结构数据通过内存流方式读取与保存到本地 TMemoryStream

    说明: 自定义中的数据类型尽量不要用string如果使用那么在保存数据,与读取数据中增加转换var MyDynamicArray: array of Char;begin SetLength(MyDynamicArray, 48); // 设置数组长度为 48 StrPCopy(MyDynamicArray, ...

    通达信自定义数据采集调用指标2.0.zip

    “SIGNALS_USER(1,0)”,里面是“1”就是自定义数据管理器里面的编号,就是通过这个函数来链接外部自定义数据的,需要用到哪些数据,我们就更改相应的数据编号就行,STICKLINE和DRAWTEXT函数一个是显示指标上显示...

    QComboBox绑定自定义结构数据

    在实际项目中,我们往往需要将自定义的数据结构与`QComboBox` 的选项进行绑定,以便在用户选择某个选项时,能够获取到与之相关的自定义数据。本示例("QComboBoxDemo01")就是演示如何实现这一功能。 首先,让我们...

    大智慧扩展数据、自定义数据.doc

    大智慧新一代数据管理提供了三种数据扩展方式,分别是附加数据、扩展数据和自定义数据,以满足用户对股票分析的深度需求。 1. **附加数据**: - 由服务器提供,客户端按需请求。 - 包括三种类型:股票相关序列值...

    【顶级游资】股行者龙虎榜自定义数据采集工具+附指标 .zip

    将龙虎榜中的,顶级游资,活跃游资,知名游资,做自定义数据关注,不活跃的不做轨迹关注! 1.导入一下顶级游资轨迹指标,方便后面调用进来的数据!并且打开一个通达信软件!! 2.将模块初始化,自动建立顶级游资...

    易语言自定义数据类型转换1.1源码

    1:支持自定义数据类型中嵌套自定义数据类型。2:支持自定义数据类型 基本类型数组。3:不支持自定义数据类型中嵌套自定义数据类型数组,注意,是不支持 。这东西能干嘛呢?。一般可以用来直接保存/还原自定义数据类型。...

    火山PC类似易语言的自定义数据类型结构体案例

    在火山PC中,我们可以利用其强大的语法支持来定义结构体,以便于组织和处理复杂的数据结构。结构体是一种复合数据类型,它可以包含多个不同类型的成员,通过一个标识符(结构体名)来引用。 首先,我们需要了解如何...

    易语言自定义数据类型访问提速

    在易语言中,自定义数据类型是一种重要的概念,允许用户根据实际需求定义自己的数据结构,以实现更高效的数据管理和处理。本文将深入探讨如何通过优化自定义数据类型的访问方式来提高程序性能,尤其是利用传址技术...

    易语言自定义数据类型访问提速源码

    自定义数据类型允许用户根据实际需求定义新的数据结构,比如组合多种基本数据类型或者自定义结构体。 本资源提供了“易语言自定义数据类型访问提速源码”,其主要目标是优化对自定义数据类型的访问效率。在易语言中...

Global site tag (gtag.js) - Google Analytics