(五)Map集合
1.Map集合概述和使用
Map集合概述
- interface Map<K,V> K:键的类型; V:值的类型
- 将键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值
- 举例:学生的学号和姓名
创建Map集合的对象
- 多态的方式
- 具体的实现类HashMap
代码演示:
import java.util.HashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
//创建集合对象
Map<String, String> map = new HashMap<>();
//V put (K key,V value) 将指定的值与该映射中的指定键相关联
map.put("19103205", "学生1");
map.put("19103206", "学生2");
map.put("19103204", "学生3");
map.put("19103204", "学生4");//第二次使用put方法相当于修改
//输出集合对象
System.out.println(map);//{19103206=学生2, 19103204=学生4, 19103205=学生1}
}
}
2.Map集合的基本功能
3.Map集合的获取功能
代码演示:
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
//创建集合对象
Map<String, String> map = new HashMap<>();
//V put (K key,V value) 将指定的值与该映射中的指定键相关联
map.put("19103205", "学生1");
map.put("19103206", "学生2");
map.put("19103204", "学生3");
// V get(Object key):根据键获取值
System.out.println(map.get("19103205"));//学生1
System.out.println(map.get("191032"));//null
//Set<K> keySet():获取所有键的集合
Set<String> set = map.keySet();
for(String i : set){
System.out.println(i);
}
//Collection<V> values():获取所有值的集合
Collection<String> collection = map.values();
for(String i :collection) {
System.out.println(i);
}
}
}
4.Map集合的遍历
(1)方式一
遍历思路:
- 获取所有键的集合。用keySet()方法实现
- 遍历键的集合,获取到每一个键。用增强for实现
- 根据键去找值。用get(Object key)方法实现
代码演示:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
//创建集合对象
Map<String, String> map = new HashMap<>();
//添加
map.put("19103205", "学生1");
map.put("19103206", "学生2");
map.put("19103204", "学生3");
//遍历
Set<String> keySet = map.keySet();
//遍历键的集合,获取到每一个键
for (String key : keySet) {
//根据键去找值
String value = map.get(key);
System.out.println(key + "," + value);
}
}
}
(2)方式二
遍历思路:
- 获取所有键值对对象的集合
Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
- 遍历键值对对象的集合,得到每一个键值对对象
用增强for实现,得到每一个Map.Entry
- 根据键值对对象获取键和值
用getKey()得到键
用getValue()得到值
代码演示:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
//创建集合对象
Map<String, String> map = new HashMap<>();
//添加
map.put("19103205", "学生1");
map.put("19103206", "学生2");
map.put("19103204", "学生3");
//遍历
Set<Map.Entry<String, String>> entrySet = map.entrySet();
for (Map.Entry<String, String> me : entrySet) {
String key = me.getKey();
String value = me.getValue();
System.out.println(key + "," + value);
}
}
}
5.案例(HashMap嵌套ArrayList)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public class HashMapDemo2 {
public static void main(String[] args) {
//创建HashMap集合
HashMap<String, ArrayList<String>> hm = new HashMap<>();
//创建ArrayList集合,并添加元素
ArrayList<String> sgyy = new ArrayList<>();
sgyy.add("诸葛亮");
sgyy.add("赵云");
//将ArrayList作为元素添加到集合中
hm.put("三国演义", sgyy);
ArrayList<String> xyj = new ArrayList<>();
xyj.add("唐僧");
xyj.add("孙悟空");
hm.put("西游记", xyj);
ArrayList<String> shz = new ArrayList<>();
shz.add("武松");
shz.add("鲁智深");
hm.put("水浒传", shz);
//遍历
Set<String> keySet = hm.keySet();
for (String key : keySet) {
System.out.println(key);
ArrayList<String> value = hm.get(key);
for (String array : value) {
System.out.print(array+", ");
}
System.out.println();
}
}
}
6.统计字符串中每个字符出现的次数
代码实现:
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
public class HashMapDemo3 {
public static void main(String[] args) {
//创建HashMap集合(无顺序)
//HashMap<Character, Integer> hm = new HashMap<>();
//创建TreeMap集合(可以有顺序)
TreeMap<Character, Integer> hm = new TreeMap<>();
//键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("请输入一组字符串:");
String s = sc.nextLine();
//遍历字符串
for (int i = 0; i < s.length(); i++) {
//获取到每一个字符
char key = s.charAt(i);
//将字符作为键值到HashMap中进行比较,看返回结果
Integer value = hm.get(key);
if (value == null) {//如果返回结果为空,则表示这是第一个存储进去的元素
hm.put(key, 1);
} else { //如果结果不为空,则说明集合中存在这个键及元素,所以数量(value)加1
value++;
hm.put(key, value);//将新的键和值重新添加
}
}
//遍历HashMap集合,得到键和值,按要求进行拼接
StringBuilder sb = new StringBuilder();
Set<Character> keySet = hm.keySet();
for (Character key : keySet) {
Integer value = hm.get(key);
sb.append(key).append("(").append(value).append(")");
}
//将StringBuilder类型转为String类型
String result = sb.toString();
//输出结果
System.out.print(result);
}
}