`
- 浏览:
9440 次
- 性别:
- 来自:
长沙
-
在学习了数据结构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
相关推荐
在编程领域,自定义数据结构是提升程序效率和可维护性的重要工具。VB(Visual Basic)、C/C++以及C#都是广泛使用的编程语言,它们各自提供了不同的方式来创建和使用自定义数据结构。本篇文章将深入探讨这三种语言中...
本篇将深入探讨如何使用易语言来调用DLL并处理返回的自定义数据结构。 易语言是一款基于中文编程的软件开发工具,其语法简洁明了,适合初学者快速上手。在易语言中,调用DLL主要通过“系统呼叫”或“动态调用”命令...
本文将深入探讨VB中自定义数据结构的传输转换技术,这一主题在《VB之精彩编程-VB自定义数据结构的传输转换》一文中被详细阐述,通过源代码示例展示了如何在不同场景下实现自定义数据结构的有效转换。 ### 自定义...
在Oracle数据库系统中,自定义数据结构和表类型是数据库设计和开发的重要组成部分。这些特性允许用户根据业务需求创建特定的数据存储解决方案,提高数据管理的灵活性和效率。本实验主要探讨了如何在Oracle中实现...
自定义数据类型可以组合多个基本数据类型,形成一个复合的数据结构,方便处理复杂的数据。 创建自定义数据类型的语法通常如下: ```易语言 .结构 结构名 .字段1 数据类型 .字段2 数据类型 ... .结束结构 ``` ...
实现了一个自定义的数据结构 —— 树,该自定义结构不同于二叉树及其他数据结构,每个节点的子节点个数不受限制,最大限度保留了数据的原始结构,并实现了其前序和后序遍历的方法。优点是节省了内存,但缺点则是基于...
在编程领域,自定义数据结构是提升代码效率和灵活性的重要手段。本文将深入探讨如何仅通过数组实现泛型的Stack(栈)、Queue(队列)和Dictionary(字典)这三种基本数据结构,并且实现IEnumerable接口,使得这些...
在Spring Boot中,可以创建一个自定义注解,例如`@CustomResponse`,用于标记控制器方法,指示该方法应返回特定的数据结构。这个注解通常会包含一些元信息,如状态码、消息等,以便在处理过程中填充到返回结果中。...
“SIGNALS_USER(1,0)”,里面是“1”就是自定义数据管理器里面的编号,就是通过这个函数来链接外部自定义数据的,需要用到哪些数据,我们就更改相应的数据编号就行,STICKLINE和DRAWTEXT函数一个是显示指标上显示...
大智慧新一代数据管理提供了三种数据扩展方式,分别是附加数据、扩展数据和自定义数据,以满足用户对股票分析的深度需求。 1. **附加数据**: - 由服务器提供,客户端按需请求。 - 包括三种类型:股票相关序列值...
将龙虎榜中的,顶级游资,活跃游资,知名游资,做自定义数据关注,不活跃的不做轨迹关注! 1.导入一下顶级游资轨迹指标,方便后面调用进来的数据!并且打开一个通达信软件!! 2.将模块初始化,自动建立顶级游资...
1:支持自定义数据类型中嵌套自定义数据类型。2:支持自定义数据类型 基本类型数组。3:不支持自定义数据类型中嵌套自定义数据类型数组,注意,是不支持 。这东西能干嘛呢?。一般可以用来直接保存/还原自定义数据类型。...
在火山PC中,我们可以利用其强大的语法支持来定义结构体,以便于组织和处理复杂的数据结构。结构体是一种复合数据类型,它可以包含多个不同类型的成员,通过一个标识符(结构体名)来引用。 首先,我们需要了解如何...
自定义数据类型可以通过“定义数据类型”命令创建,可以包含基本数据类型(如整数、浮点数、字符串等)以及其它自定义数据类型的组合,形成复杂的数据结构。在多线程环境中,如果需要在线程间传递这样的自定义数据,...
在开发过程中,我们经常需要处理 JSON 数据并将其转换为自定义的数据结构。这样做有助于我们更好地管理和操作数据。对于较小的 JSON 对象,我们可以手动创建相应的易语言数据类型,但面对大型或复杂的 JSON 数据时,...
在易语言中,自定义数据类型是一种重要的概念,允许用户根据实际需求定义自己的数据结构,以实现更高效的数据管理和处理。本文将深入探讨如何通过优化自定义数据类型的访问方式来提高程序性能,尤其是利用传址技术...
自定义数据类型(用户定义类型)允许程序员根据实际需求创建自己的数据结构。在易语言中,你可以通过组合基本数据类型(如整型、浮点型、字符串等)来定义新的复杂类型。这有助于组织和管理数据,提高代码的可读性...
1. **自定义数据类型**:在易语言中,自定义数据类型允许开发者创建新的复合数据结构,例如包含不同类型变量的结构。这可以通过"定义数据类型"命令来实现,如定义一个包含整型、浮点型和字符串的结构体。 2. **DLL...
例如,你可能需要将一个自定义的数据结构序列化为字节序列以便于存储或传输,或者从接收到的字节流中解析出自定义的数据结构。这种转换通常涉及对数据类型的字段进行逐个读取或写入,以及可能的字节序处理(如大端序...
然而,当数据库中存在特殊类型或者我们的业务逻辑需要特定的数据结构时,就需要自定义数据类型。 创建自定义数据类型主要包括以下几个步骤: 1. **定义映射类**:创建一个Java类,它将作为自定义数据类型的实现。...