MAP 大概介绍

原创 2006年06月07日 13:14:00

核心 Map

Java 自带了各种 Map 类。 这些 Map 类可归为三种类型:

  1. 通用 Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现
    • HashMap
    • Hashtable
    • Properties
    • LinkedHashMap
    • IdentityHashMap
    • TreeMap
    • WeakHashMap
    • ConcurrentHashMap
  2. 专用 Map,您通常不必亲自创建此类 Map,而是通过某些其他类对其进行访问
    • java.util.jar.Attributes
    • javax.print.attribute.standard.PrinterStateReasons
    • java.security.Provider
    • java.awt.RenderingHints
    • javax.swing.UIDefaults
  3. 一个用于帮助实现您自己的 Map 类的抽象类
    • AbstractMap

内部哈希: 哈希映射技术

几乎所有通用 Map 都使用哈希映射。 这是一种将元素映射到数组的非常简单的机制,您应了解哈希映射的工作原理,以便充分利用 Map。

哈希映射结构由一个存储元素的内部数组组成。 由于内部采用数组存储,因此必然存在一个用于确定任意键访问数组的索引机制。 实际上,该机制需要提供一个小于数组大小的整数索引值。 该机制称作哈希函数。 在 Java 基于哈希的 Map 中,哈希函数将对象转换为一个适合内部数组的整数。 您不必为寻找一个易于使用的哈希函数而大伤脑筋: 每个对象都包含一个返回整数值的 hashCode() 方法。 要将该值映射到数组,只需将其转换为一个正值,然后在将该值除以数组大小后取余数即可。 以下是一个简单的、适用于任何对象的 Java 哈希函数


(% 二进制运算符(称作模)将左侧的值除以右侧的值,然后返回整数形式的余数。)

实际上,在 1.4 版发布之前,这就是各种基于哈希的 Map 类所使用的哈希函数。 但如果您查看一下代码,您将看到


它实际上是使用更快机制获取正值的同一函数。 在 1.4 版中,HashMap 类实现使用一个不同且更复杂的哈希函数,该函数基于 Doug Lea 的 util.concurrent 程序包(稍后我将更详细地再次介绍 Doug Lea 的类)。

图 3: 哈希工作原理

该图介绍了哈希映射的基本原理,但我们还没有对其进行详细介绍。 我们的哈希函数将任意对象映射到一个数组位置,但如果两个不同的键映射到相同的位置,情况将会如何? 这是一种必然发生的情况。 在哈希映射的术语中,这称作冲突。 Map 处理这些冲突的方法是在索引位置处插入一个链接列表,并简单地将元素添加到此链接列表。 因此,一个基于哈希的 Map 的基本 put() 方法可能如下所示


如果看一下各种基于哈希的 Map 的源代码,您将发现这基本上就是它们的工作原理。 此外,还有一些需要进一步考虑的事项,如处理空键和值以及调整内部数组。 此处定义的 put() 方法还包含相应 get() 的算法,这是因为插入包括搜索映射索引处的项以查明该键是否已经存在。 (即 get() 方法与 put() 方法具有相同的算法,但 get() 不包含插入和覆盖代码。) 使用链接列表并不是解决冲突的唯一方法,某些哈希映射使用另一种“开放式寻址”方案,本文对其不予介绍。

优化 Hasmap

如果哈希映射的内部数组只包含一个元素,则所有项将映射到此数组位置,从而构成一个较长的链接列表。 由于我们的更新和访问使用了对链接列表的线性

机器学习理论与实战(十三)概率图模型01

概率图模型是图论和概率论结合的产物,它的开创者是鼎鼎大名的Judea Pearl,我十分喜欢概率图模型这个工具,它是一个很有力的多变量而且变量关系可视化的建模工具,主要包括两个大方向:无向图模型和有向...
  • cuoqu
  • cuoqu
  • 2013年08月17日 16:47
  • 11570

ceph一些基础概念的简介

最近因为整理文档,发现一些很久以前写的关于ceph基础介绍的ppt,为了防止资料丢失,打算把搬到这里留作备份。 现在线上环境是openstack+ceph的结构,ceph直接连接在openstack...
  • ywy463726588
  • ywy463726588
  • 2015年01月15日 17:27
  • 5282

EM算法 - 1 - 介绍

声明:          1,本篇为个人对《2012.李航.统计学习方法.pdf》的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址)。          2,由于本人在学习初始时有很多数...
  • xueyingxue001
  • xueyingxue001
  • 2016年05月11日 14:13
  • 6381

移动网络MAP、CAP协议介绍.ppt

  • 2009年06月29日 11:12
  • 1.73MB
  • 下载

java中MAp介绍

  • 2012年03月06日 13:34
  • 8KB
  • 下载

MAP、CAP协议介绍

  • 2010年10月19日 20:06
  • 1.73MB
  • 下载

android map api 介绍

  • 2011年06月14日 09:50
  • 583KB
  • 下载

介绍优秀Google Map API的网站

  • 2012年02月27日 08:30
  • 142B
  • 下载

MDK map 文件介绍

  • 2015年09月14日 08:47
  • 735KB
  • 下载

常用的java应用服务器大概介绍

何为应用服务器呢?它主要为应用程序提供运行环境,为组件提供服务。想进一步了解,可以查看我的博客:何为容器? Java 的应用服务器很多,从功能上分为两类:WEB 应用服务器和 Jav...
  • u013604031
  • u013604031
  • 2016年12月27日 13:59
  • 3487
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MAP 大概介绍
举报原因:
原因补充:

(最多只允许输入30个字)