单列集合: 双列集合:
Map接口体系图
Map接口实现类的特点(JDK8)
- Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
- Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中
- Map中的key不允许重复,原因和HashSet一样,前面分析过源码
- Map中的value可以重复
- Map的key可以为null,value也可以为null,注意key为null只能有一个,value为null可以多个
- 常用String类作为Map的key
- key和value之间存在单向一对一关系,即通过指定的key总能到对应的value
- Map存放数据的key-value示意图,一对k-v是放在一个HashMap$Node中的,又因为Node实现了Entry接口,有时会说一对k-v就是一个Entry
注意事项:
- k-v最后是HashMap$Node node= newNode(hash,key,value,null)
- k-v为了方使程序员的遍历,还会创建EntrySet集合,该集合放的元素的类型Entry,而一个 Entry对象就有k,v——EntrySet
>即:transient Set > entrySet - entrySet中,定义的类型是Map.Entry,但是实际上存放的还是HashMap$Node,这是因为static class Node
implements Map.Entry - 当把 HashMap$Node对象在放到entrySet就方使我们的遍历,因为Map.Entry提供了重要方法K getkey(),V getValue()。可以单独获取键的set(个人理解:因为键内容不能重复所以用set接收),也可以单独获取值的collection。都是指向node中的K,V
Map接口常用方法
- put:添加
- remove:根据键删除映射关系
- get:根据键获取值
- size:取元素个数
- isEmpty:判断个数是否为0
- clear:清除
- containsKey:查找键是否存在
Map遍历
- 先取出key,再通过增强for循环或迭代器遍历
- 获取entrySet,再通过增强for循环或迭代器遍历
Set entrySet = map.entrySet(); //EntrySet