单列集合: 双列集合:
image.png image.png

Map接口体系图

image.png

Map接口实现类的特点(JDK8)

  1. Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
  2. Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中
  3. Map中的key不允许重复,原因和HashSet一样,前面分析过源码
  4. Map中的value可以重复
  5. Map的key可以为null,value也可以为null,注意key为null只能有一个,value为null可以多个
  6. 常用String类作为Map的key
  7. key和value之间存在单向一对一关系,即通过指定的key总能到对应的value
  8. Map存放数据的key-value示意图,一对k-v是放在一个HashMap$Node中的,又因为Node实现了Entry接口,有时会说一对k-v就是一个Entry

image.png
注意事项:

  1. k-v最后是HashMap$Node node= newNode(hash,key,value,null)
  2. k-v为了方使程序员的遍历,还会创建EntrySet集合,该集合放的元素的类型Entry,而一个 Entry对象就有k,v——EntrySet>即:transient Set> entrySet
  3. entrySet中,定义的类型是Map.Entry,但是实际上存放的还是HashMap$Node,这是因为static class Node implements Map.Entry
  4. 当把 HashMap$Node对象在放到entrySet就方使我们的遍历,因为Map.Entry提供了重要方法K getkey(),V getValue()。可以单独获取键的set(个人理解:因为键内容不能重复所以用set接收),也可以单独获取值的collection。都是指向node中的K,V

Map接口常用方法

  1. put:添加
  2. remove:根据键删除映射关系
  3. get:根据键获取值
  4. size:取元素个数
  5. isEmpty:判断个数是否为0
  6. clear:清除
  7. containsKey:查找键是否存在

Map遍历

  1. 先取出key,再通过增强for循环或迭代器遍历

image.png

  1. 获取entrySet,再通过增强for循环或迭代器遍历

Set entrySet = map.entrySet(); //EntrySet>
image.png