一、Map接口继承树
二、Map接口概述
Map
与Collection
并列存在,用于保存具有映射关系的数据key-value
。Map
中的key
和value
都可以是任何引用类型的数据。Map
中的key
用Set
来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()
和equals()
方法。- 常用
String
类作为Map
的“键”。 key
和value
之间存在单向一对一关系,即通过指定的key
总能找到唯一的、确定的value
。Map
接口的常用实现类:HashMap
、TreeMap
、LinkedHashMap
和Properties
。其中,HashMap
是Map
接口使用频率最高的实现类。
三、常用实现类结构
|----Map
:双列数据,存储key-value对的数据 —类似于高中的函数:y = f(x)
|----HashMap
:作为Map的主要实现类;线程不安全的,效率高;存储null的key和value
|----LinkedHashMap
:保证在遍历map元素时,可以照添加的顺序实现遍历。
原因是在原的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个元素。
对于频繁的遍历操作, 此类执行效率高于HashMap。
|----TreeMap
:保证照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序,底层使用红黑树
|----Hashtable
:作为古老的实现类;线程安全的,效率低;不能存储null的key和value
|----Properties
:常用来处理配置文件。key和value都是String类型
HashMap的底层的实现:数组+链表 (jdk7及之前)
数组+链表+红黑树 (jdk 8)
四、存储结构的理解
Map
中的key
:无序的、不可重复的,使用Set存储所的key。 key所在的类要重写equals()和hashCode() (以HashMap为例)
Map
中的value
:无序的、可重复的,使用Collection存储所的value。value所在的类要重写equals()
一个键值对:key-value
构成了一个Entry
对象。
Map
中的entry
:无序的、不可重复的,使用Set存储所的entry