`
skeeey
  • 浏览: 33925 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

映射表 map(一)

阅读更多
由于近来学习groovy,看到了其映射表,想知道其实际的结构,而映射表又是计算机技术中一个十分重要的数据结构,所以想写一个系列,仔细探寻一下映射表。
     本篇从数据结构上给以说明,映射表(map)是一种具有key/value(键/值)结构的集合,我的理解这种数据结构其实就是一种功能更强大的数组,key就是数组下标,而value就是下标对应的值,现代语言都对它都有相应的实现。在这里分别对他们[主要包括python,java,groovy,因为我只会这几个语言 :-) ]进行剖析。
      由于hashmap是map最长用的一种实现,所以先说一下hash算法,他是一种计算式的查找方法,基本思想是在k和v的存储位置p之间建立一种函数关系( p=H(k) ),然后由k通过函数H计算出p,然后达到直接存储v的目的.而当k的集合很大时,就有相当大的概率使得k1 != k2 时有H(k1) = H(k2),这种问题就是冲突,所以我们设计H的时候,就是尽力避免冲突。
     那么hash函数的构造方式常见的有:(详细的论述我就不写了,这些都可以从数据结构的书中查到)
  • 数字分析法
  • 平方取中法
  • 分段叠加法
  • 除留余数法
  • 伪随机数法

     而这些方式都是需要基于key的,而key通常就是hashcode的,也就是用一串数字来代表一个对象,或一个结构,比如java的根类Object中有一个int hashCode();的方法,如果你不去显示的重写它,那么它默认的返回该对象在内存中的地址。
      处理冲突
  • 再散列法
  • 再哈希法
  • 连地址法

建立公共溢出区法
    性能:
  • 散列函数是否均匀;
  • 处理冲突的方法;
  • 散列表的装填因子。

  散列表的装填因子定义为:α= 填入表中的元素个数 / 散列表的长度
而α常常是经过大量的实际测算得出的,比如java的hashmap的α为0.75
分享到:
评论

相关推荐

    字符映射表

    字符映射表(Character Map)是计算机软件中用于管理和显示可使用的字符集的一个工具,它在操作系统中扮演着至关重要的角色。特别是在处理多种语言、特殊符号或者非ASCII字符时,字符映射表提供了查找和复制特定字符...

    哈希映射 hash map

    哈希映射(Hash Map),又称为哈希表,是一种数据结构,用于高效地存储和检索键值对。它基于哈希表的概念,利用哈希函数将键(Key)映射到一个固定大小的数组(桶)中的特定位置,以此实现快速访问。哈希表最大的...

    MATLAB 映射表数据结构

    - **映射表对象**:在MATLAB中,映射表是一个独立的对象,可以通过`containers.Map`类创建。 2. **创建映射表** 创建映射表通常使用`containers.Map`构造函数,例如: ```matlab mapObj = containers.Map('Key...

    中文简体-繁体映射表

    标题中的"中文简体-繁体映射表"和"jf_map_utf8.properties"以及"中文繁体-简体映射"描述,指的是两个用于进行简繁转换的资源文件。这两个文件分别用于两个方向的转换:`jf_map_utf8.properties`用于将简体中文转换为...

    FIS 静态资源映射表与PHP结合-PHP

    FIS 静态资源映射表是 FIS 中一个重要的概念,它记录了文件依赖、打包、URL 等信息,相当于一个资源的索引表,使得资源管理更加高效和有序 。 在 PHP 环境中,FIS 静态资源映射表可以通过特定的方法与 PHP 结合使用...

    hibernate map 集合映射

    集合映射是Hibernate中一个核心的概念,它允许我们将数据库表中的多对一(OneToMany)、一对多(ManyToOne)、多对多(ManyToMany)等关系映射到Java对象的集合属性上。通过这种方式,我们可以以面向对象的方式处理...

    Springboot中mybatis表关联映射关系(一对一)

    Springboot 中 MyBatis 表关联映射关系(一对一) 在 Springboot 中,MyBatis 提供了强大的表关联映射关系机制,可以实现一对一、多对一、多对多等各种关联关系。在本文中,我们将详细介绍 Springboot 中 MyBatis ...

    Hibernate使用 Map实现多对多映射

    没有显示在提供的内容中,但通常会有一个类似的映射,反向关联`Team`,将`team`属性映射到`memberAtTeams2`表,`<key>`元素指定了关联表的外键`member`,而`<composite-element>`元素则定义了`Map`中元素的类型,即`...

    MATLAB映射表数据结构.docx

    `containers.Map`,也称为映射表,是一种存储键值对的数据结构。它的核心特性在于每个键都是唯一的,并且每个键都对应一个键值。这类似于函数映射的概念,即对于每个键(X),都有一个唯一对应的键值(Y)。这种一一...

    基于MAP 映射算法的物理层网络编码性能分析 Performance analysis of physical-layer network coding based on the MAP mapping algorithm

    本文重点讨论了一种基于最大后验概率(Maximum A Posteriori, MAP)映射算法的PNC方案,并对其性能进行了深入分析。 #### 二、物理层网络编码原理 物理层网络编码的基本原理在于利用无线信号的自然叠加特性。当两个...

    TS协议之PMT(节目映射表)

    PMT(Program Map Table,节目映射表)是TS协议中的一个重要组成部分,它与PAT(Program Association Table,节目关联表)一起工作,用于解析和解码TS流中的不同节目内容。 PMT的主要作用是提供每个节目(Program)...

    数据结构-映射(Map)介绍和Java示例代码

    数据结构映射(Map)是编程中一个关键的数据组织方式,特别是在Java语言中,它提供了一种高效的方式来存储和检索键值对。Map接口在Java的`java.util`包中定义,实现了键唯一性、无序性和动态大小调整等特性,使得它...

    cubemap,立方体映射

    总结来说,"cubemap,立方体映射"是一个利用OpenGL和环境映射技术在3D场景中实现逼真反射效果的应用实例。它涉及到的知识点包括但不限于:OpenGL编程、纹理映射、光照模型、3D几何变换、Windows编程以及图像处理。...

    Erlang中的映射组Map详细介绍

    Erlang中的映射组(Map)是一种数据结构,它提供了键值对的存储功能,类似于其他编程语言中的哈希表或字典。从Erlang的R17版本开始,Map成为了一种内置的数据类型,它以#{...}的形式表示。 ### 创建映射组 在...

    查询返回Map

    查询结果通常是多个行,每一行可以映射为一个Map,键可能是数据库字段名,值则是对应字段的值。 例如,使用JDBC的代码可能如下: ```java List<Map, Object>> result = jdbcTemplate.queryForList("SELECT * FROM ...

    电机map图绘制

    电机Map图绘制是电机设计与分析中的一个重要环节,它能够直观地展示电机在不同工作条件下的性能特性。Map图通常包括效率地图(Efficiency Map)和功率地图(Power Map),帮助工程师了解电机在不同转速和负载下的...

    java 运用映射的相关类(Map)

    1. **HashMap**:HashMap是最常用的Map实现,它基于哈希表数据结构,提供了快速的插入、删除和查找操作。平均时间复杂度为O(1)。但是,HashMap是无序的,不保证元素的顺序,且不是线程安全的。 2. **TreeMap**:...

    文本串的加密 数据结构

    我们可以创建一个函数,接受用户输入的明文字符串和映射表,然后遍历字符串中的每个字符,根据映射表进行加密操作。对于每个字符,我们检查它是否在映射表范围内,如果是,则根据映射规则替换;如果不是,就保留原样...

    Hibernate常见集合映射(Set,List_Array,Map,Bag)

    例如,创建一个名为 `message` 的表,包含 `id`、`setValue`、`listValue`、`arrayValue`、`mapValue` 和 `bagValue` 等字段。每个字段对应一个集合类型。 实体类设计 在创建实体类时,需要使用对应的集合类型。...

    AddressMap

    内存映射表(AddressMap)是一种在计算机编程中用于管理和操作内存分配的数据结构,它主要用于跟踪内存块的分配和释放情况。在这个特定的项目中,`AddressMap` 实现了一个功能丰富的工具,允许进行合并、删除、添加...

Global site tag (gtag.js) - Google Analytics