Java-Map-详解
Map架构图
Map是(key,value)形式的数据结构,Map与Collection接口是平级的,而且两者有关联,
Collection框架中的Set的实现类都是基于Map来实现的。例如(HashSet基于HashMap实现,LinkedHashSet基于LinkenHashMap实现。)
Map的分类
Java中有自带的Map类,根据这些类,大致分为三种:
通用Map
java.util中的各种Map,其中有HashMap、Hashtable、Properties、LinkedHashMap、IdentityHashMap、TreeMap、WeakHashMap、ConcurrentHashMap
专用Map
通常我们不必亲自创建此类Map,而是通过某些其他类对其进行访问
java.util.jar.Attributes、javax.print.attribute.standard.PrinterStateReasons、java.security.Provider、java.awt.RenderingHints、javax.swing.UIDefaults
扩展Map
一个用于帮助我们实现自己的Map类的抽象类
AbstractMap
Hash(散列/哈希)的概念
何为hash
想要清楚Map的数据结构,哈希是基本概念,我们先来看看何为哈希
hash翻译为"散列",也有直接音译为"哈希",就是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。这是一种压缩机制,因为散列值所占用的空间远小于输入值所占的空间,不同的输入可能形成相同的散列值,所以不能通过散列值来确定唯一的输入值。简单来说,hash就是将任意长度消息压缩为固定长度消息摘要的函数。
散列表
散列表(hash table 也叫哈希表)是通过关键(key,value)key值直接访问的数据结构。它通过将关键key值映射到表中的位置来访问数据,来加快访问速度,这个映射函数叫做散列函数,存储散列值的数组叫做散列表。
拉链法解决冲突
既然我们知道,不同的输入值可能产生相同的散列值,那就产生了冲突问题,针对这个问题,可以使用拉链法解决。解决方式为