集合基础5:Map集合概述、API、遍历方式、案例、实现类 集合嵌套
Map集合概述



Map集合体系特点



常用API
public V get(Objcet key) 根据键获取对应值,如果没有对应的键,会返回null
public Set<K> keySet() 获取全部键的集合,返回值为set集合,因为set符合key无序不重复的特点
public Collection<V> values() 获取全部值的集合,返回值为collection集合,因为value可能重复
public Set<Entry<K,V>> entrySet() 将Map集合转换为Set集合,map中每一个键值对作为set中的一个元素



Map遍历方式

方式一:键找值


方式二:键值对



方式三:lambda表达式


案例

package com.zjm.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class Demo01 {
public static void main(String[] args) {
// 1、把80个学生选择的数据拿进来。
String[] selects = {"A","B","C","D"};
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 80; i++) {
sb.append(selects[random.nextInt(selects.length)]);
}
System.out.println("学生数据:"+sb);
// 2、定义一个Map集合记录最终统计的结果: A=30 B=20 C=20 D=10键是景点 值是选择的数量
Map<Character,Integer> result = new HashMap<>();
// 3. 遍历80个学生选择的数据
for (int i = 0; i < sb.length(); i++) {
// 4.提取当前选择景点字符
char ch = sb.charAt(i);
// 5. 判断Map集合中是否存在这个键
if (result.containsKey(ch)){
result.put(ch,result.get(ch)+1);
}else {
result.put(ch,1);
}
}
System.out.println("统计结果:"+result);
}
}
实现类HashMap


实现类LinkedHashMap

实现类TreeMap


集合嵌套案例

package com.zjm.map;
import java.util.*;
public class Demo02 {
//集合嵌套案例:景点人数投票统计,一个人可以投多个景点
public static void main(String[] args) {
//1、使用一个Map集合存储。
Map<String, List<String>> data = new HashMap<>();
// 2、把学生选择的数据存入进去。
List<String> selects = new ArrayList<>();
Collections.addAll(selects,"A","B");
data.put("小明",selects);
List<String> selects1 = new ArrayList<>();
Collections.addAll(selects1,"A","B","C");
data.put("小红",selects1);
List<String> selects2 = new ArrayList<>();
Collections.addAll(selects2,"A","B","C","D");
data.put("小王",selects2);
System.out.println(data);
//3.统计每个景点选择的人数。
Map<String,Integer> infos = new HashMap<>();
// 4.提取所有人选择的景点的信息。
Collection<List<String>> values = data.values();
for (List<String> value : values) {
for (String s : value) {
if (infos.containsKey(s)){
infos.put(s , infos.get(s) + 1);
}else {
infos.put(s , 1);
}
}
}
System.out.println("统计结果:"+infos);
}
}
浙公网安备 33010602011771号