在介绍它之前先来看看再API文档中是如何介绍它的,看图片:
由图片可以看出,Map属于双列集合,每次可以添加一对数据,并且这两个数据具有映射关系。
单列集合和双列集合区别
一、Map继承体系
1.HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。哈希表控制键,键唯一。
2.LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
3.TreeMap:TreeMap集合和Map相比没有特有的功能,底层的数据结构是红黑树;可以对元素的键进行排序,排序方式有两种:自然排序和比较器排序
4.利弊比较:
Hashtable被HashMap集合取代了 安全的,但是效率比HashMap低
ConcurrentHashMap属于多线程安全,效率低 比Hashtable效率高
二、Map接口的方法介绍
Map接口中定义了很多方法,常用的如下:
public V put(K key, V value): | 把指定的键与指定的值添加到Map集合中。 说明:(1)执行put添加数据的时候,如果新添加的键不存在,那么此时直接添加,并返回null(2)执行put添加数据的时候,如果新添加的键存在,那么新添加的value覆盖之前旧的value,并返回旧的value |
public V remove(Object key): | 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。 |
public V get(Object key): | 根据指定的键,在Map集合中获取对应的值。 |
public SetkeySet(): | 获取Map集合中所有的键,存储到Set集合中。 |
public Set> entrySet(): | 获取到Map集合中所有的键值对对象的集合(Set集合)。说明:该方法表示获取Map集合中的所有的键值对,存放到单列集合Set中,键值对属于Map.Entry类型 |
public boolean containKey(Object key): | 判断该集合中是否有此键。 如果包含返回true,否则返回false |
int size() | 返回此映射中的键-值映射关系数。 集合长度 |
代码演示:
三、Map集合的遍历
1.使用keySet方法遍历(了解)
需要使用的方法:
public V get(Object key): | 根据指定的键,在Map集合中获取对应的值。 |
public SetkeySet(): | 获取Map集合中所有的键,存储到Set集合中 |
2.使用entrySet方式遍历Map集合(掌握)
使用方法:
Map接口中的方法:
public Set> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。
说明:该方法表示获取Map集合中的所有的键值对,存放到单列集合Set中, 键值对属于Map.Entry
使用Map.Entry接口中的方法:
K getKey() 返回与此项对应的键。
V getValue() 返回与此项对应的值。
四、Map常用子类
1.HashMap类
HashMap作为最常用集合之一,继承自Map。JDK8的HashMap实现与JDK7不同,新增了红黑树作为底层数据结构,结构变得复杂,效率变得更高。为满足自身需要,也重新实现了很多Map中的方法。
HashMap类底层是一个哈希表数据结构,控制键。要求HashMap键位置的对象所属类必须重写hashCode和equals方法。
小结:
1.HashMap属于jdk1.2之后才有的,替换了Hashtable,提高效率
2.底层哈希表数据结构控制键,所以要求键位置的对象所属类必须重写hashCode和equals方法
3.HashMap集合的键和值都可以是null,但是键位置只能是一个null
2.Hashtable类
Hashtable从jdk1.0就有了,它的安全性较高,但是效率低。底层是哈希表数据结构,控制键。该集合的键和值不允许是null,而从1.2开始后被HashMap取代了,HashMap效率更高。
代码演示:
3.LinkedHashMap
底层基于两个数据结构,分别为哈希表和双链表。哈希表的作用是存储数据保证数据唯一;双链表的作用为保证数据存储有序。
代码演示:
4.TreeMap类
TreeMap底层基于红黑树结构,控制键,可以对键进行排序。具有排序方法看下面的构造方法:
1) TreeMap() 对键是大小升序,非自定义类(String Integer)按照大小升序排序
2)TreeMap(Comparator comparator) 根据键按照指定规则进行排序,
参数:comparator属于自定义比较器接口Comparator类型,具体的排序规则由我们实现该接口的排序方法指定:
int compare(T o1, T o2)
o1 - o2 升序
o2 - o1 降序
代买演示: