Map 接口介绍

2020-11-19 0 By admin

Map与Collection并列存在。用于保存具有映射关系的数据:key-value;其中常用String类作为Map的“键|key”。Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和Properties。其中,HashMap是Map接口使用频率最高的实现类。

一、Map 接口概述

1.1、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)

1.2、Map中存储的key-value的特点

  1. Map中的key和value都可以是任何引用类型的数据。
  2. Map 中的key 用Set来存放,不允许重复,即同一个Map 对象所对应的类,须重写hashCode()和equals()方法。
  3. key和value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确定的value。

二、Map结构的理解

  1. Map中的key:无序的、不可重复的,使用Set存储所有的key。key所在的类要重写equals()和hashCode()(以HashMap为例)。
  2. Map中的value:无序的、可重复的,使用Collection存储所有的value。->value所在的类要重写equals()。
  3. 一个键值对:key-value构成了一个Entry对象。
  4. Map中的entry:无序的、不可重复的,使用Set存储所有的entry。
Map 存储结构理解
Map 存储结构理解