Map接口
概述
java.util接口 Map<K,V>
- 双列数据,存储key-value对的数据 —类似于高中的函数:y = f(x)
- 类型参数: K - 此映射所维护的键的类型V - 映射值的类型。
- 也叫哈希表、散列表。常用于存 键值对 结构的数据。其中的键不能重复,值可以重复.
特点
- 可以根据键 提取对应的值
- 键不允许重复,如果重复值会被覆盖
- 存放的都是无序数据
- 初始容量是16,默认的加载因子是0.75
继承结构
Map结构的理解:
-
Map中的key:无序的、不可重复的,使用Set存储所有的key —> key所在的类要重写equals()和hashCode()(以HashMap为例)
-
Map中的value:无序的、可重复的,使用Collection存储所有的value —>value所在的类要重写equals()
-
一个键值对:key-value构成了一个Entry对象。
-
Map中的entry:无序的、不可重复的,使用Set存储所有的entry
HashMap:
- 作为Map的主要实现类,线程不安全,效率高:能存储null的key和value
HashMap的底层:
- 数组+链表 (jdk7及以前)
- 数组+链表+红黑树 (jdk8及以后)
LinkedHashMap:
- 在原有的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个元素,
- 保证在遍历map元素时,可以按照添加的顺序实现遍历。
- 对于频繁的遍历操作,此类执行效率高于HashMap
TreeMap:
- 保证按照添加的key-value对进行排序,实现排序遍历,此时考虑key的自然排序或定时排序
- 底层是红黑树
Hashtable:
- 作为古老的实现类,线程安全的,效率低,
- 不能null的key和value.
Properties:
- 常用来处理配置文件,key和value都是string类型.