Map集合介绍

1.Collection是单列集合体系,Map集合是双列每个元素包含两个数据。
2.Map集合的每个元素是键值对:key=value(键值对元素)。
3.Map集合也被称为键值对集合。

Map集合特点

1.键不能重复
2.一个键对应一个值

Map集合的使用场景

购物车提供的四个商品和购买的数量在后台需要容器存储。
每个商品对象都对应一个购买数量。
把商品对象看成是Map集合的建,购买数量看成Map集合的值。
键 值
李宁鞋子 2
Java基础 3
JavaWeb 2

Map集合体系

HashMap:元素按照键不重复,无索引,存储和取出无顺序。(与Map体系一致)
image.png
LinkedHashMap:元素按照键不重复,无索引,存储和取出有顺序。
image.png
TreeMap:元素按照键排序,不重复,无索引的。

image.pngMap集合存储什么样的数据?

键值对数据

Map集合特点

键不能重复
一个键对应一个值

掌握Map集合的常用方法

Map是一个集合,常用的方法就是增删改查

Map的常用方法API如下

V put(K key, V value)//添加元素,修改元素
示范;map.put(“黄晓明”, “杨颖”);
V get(Object key)//通过键获取值
V remove(Object key)//根据键删除键值对元素
void clear()//移除所有的键值对元素
boolean containsKey(Object key)//判断集合是否包含指定的键
boolean containsValue(Object value)//判断集合是否包含指定的值
boolean isEmpty()//判断集合是否为空
int size()//集合的长度,也就是集合中键值对的个数

遍历Map集合方式一:键找值流程

获取所有的键
遍历获取每个键
通过键获取值

键值Map集合的遍历方式二:键值对流程

1.获取所有的Entry

2.遍历取出每个Entry
3.取出Entry中的键和值
image.png

HashMap的特点和底层原理

1.由键决定:无序、不重复、无索引。HashMap底层是哈希表结构的。
2.依赖hashCode方法和equals方法保证键的唯一。
3.如果键要存储的是自定义对象,需要重写hashCode和equals方法。
4.基于哈希表。增删改查的性能都较好。

学习LinkedHashMap的使用

HashMap存储和取出是没有顺序的.
LinkedHashMap继承了HashMap,通过链表保存元素存储和取出的顺序
public static void main(String[] args) {
Map map = new LinkedHashMap<>();
map.put(“黄晓明”, “杨颖”);
map.put(“李晨”, “范冰冰”);
map.put(“邓超”, “孙俪”);

  1. // 遍历Map<br /> Set<Map.Entry<String, String>> entrySet = map.entrySet();<br /> for (Map.Entry<String, String> entry : entrySet) {<br /> String key = entry.getKey();<br /> String value = entry.getValue();<br /> System.out.println(key + " ::: " + value);<br /> }<br /> }

TreeMap集合的特点

由键决定特性:不重复、无索引、可排序
1.可排序:按照键数据的大小默认升序(有小到大)排序。只能使用键排序。
2.注意:TreeMap集合是一定要排序的,可以根据键默认排序,也可以将键按照使用比较器进行排序
3.TreeMap跟TreeSet一样底层是红黑树结构的。

练习

需求:
假设15个同学做一道选择题,统计每个答案的选择次数。
“aababcabcdabcdd”
答案a出现5次
答案b出现4次
答案c出现3次
答案d出现3次
public static void main(String[] args) {
// 假设15个同学做一道选择题,统计每个答案的选择次数。
String str = “aababcabcdabcdd”;

  1. // 1.创建Map集合中,键存字符,值存出现的次数<br /> Map<Character, Integer> map = new HashMap<>();<br /> // 2.遍历字符串,得到每一个字符<br /> for (int i = 0; i < str.length(); i++) {<br /> // ch就是遍历除的每个字符<br /> char ch = str.charAt(i);<br /> // 3.判断Map键是否包含这个字符<br /> if (map.containsKey(ch)) {<br /> // 5.如果包含,次数+1<br /> // 5.1.取出次数<br /> Integer count = map.get(ch);<br /> // 5.2.次数+1<br /> map.put(ch, count + 1);<br /> } else {<br /> // 4.如果不包含,设置为1次<br /> map.put(ch, 1);<br /> }<br /> }
  2. // 6.遍历Map按照格式输出<br /> Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();<br /> for (Map.Entry<Character, Integer> entry : entrySet) {<br /> Character key = entry.getKey();<br /> Integer value = entry.getValue();<br /> System.out.println("答案" + key + "出现" + value + "次");<br /> }<br /> }