一、概述
Map集合是一种双列集合。由两部分组成。
键和值。称为键值对。
Map集合分为:
示例:
//1.创建一个Map集合对象 Map <String , Integer> maps = new HashMap<>();//一行经典代码 maps.put("鸿星尔克",3); maps.put("Java",1); maps.put("枸杞",100); maps.put("Java",100);//覆盖前面的数据 maps.put(null,null); System.out.println(maps);
Map集合特点
二、常用API
1、先创建集合,添加元素
Map<String , Integer> maps = new HashMap<>();
maps.put("iPhoneX",10);
maps.put("娃娃",31);
maps.put("iPhoneX",100);//Map集合后面重复的键对应的元素会覆盖前面重复的整个元素
maps.put("HUAWEI",1000);
maps.put("生活用品",10);
maps.put("手表",10);
2、清空集合4、根据键获取对应值:public V get(Object key)
map.clear(maps);
3、判断集合是否为空,为空就返回true,反之false
System.out.println(maps.isEmpty());
4、根据键获取对应值:public V get(Object key)
Integer key = maps.get("HUAWEI");
System.out.println(key);//1000
System.out.println(maps.get("生活用品"));//10
System.out.println(maps.get("生活用品2"));//null
5.根据键删除整个元素(删除键会返回键的值)
System.out.println(maps.remove("iPhoneX"));
System.out.println(maps);
6.判断是否包含某个键,包含返回true,反之!
Set<String> keys = maps.keySet();
System.out.println(keys);
System.out.println(maps.containsKey("娃娃"));//true
System.out.println(maps.containsKey("娃娃2"));//false
System.out.println(maps.containsKey("iPhone X2"));//false
7、判断是否包含某个值
System.out.println(maps.containsValue(100));
System.out.println(maps.containsValue(10));
System.out.println(maps.containsValue(22));
8.获取全部键的集合:public Set<K> keySet()
Set<String> keys = maps.keySet();
System.out.println(keys);
9.获取全部值的集合:Collection<V> values()
这时我们使用Collection来接数据,是因为值是可以重复的,不能用Set(去重复)
Collection<Integer> values = maps.values();
//使用Collection来接数据,是因为值是可以重复的,不能用Set(去重复)
System.out.println(values);
10、集合的大小
System.out.println(maps.size());//4
11.合并其他Map集合(拓展)
Map<String , Integer> map1 = new HashMap<>();
map1.put("java",1);
map1.put("java2",100);
Map<String , Integer> map2 = new HashMap<>();
map2.put("java2",1);
map2.put("java3",100);
map1.putAll(map2);//把集合map2 的元素拷贝一份到map1 中去
System.out.println(map1);
System.out.println(map2);
12、一些方便的快捷键
//map1.entrySet(); ctrl + alt + V键 // Set<Map.Entry<String, Integer>> entries = map1.entrySet(); //map1.keySet(); alt + 回车 // Set<String> keys = map1.keySet();
三、三种特有的遍历方式
首先:我们要创建一个集合
Map<String , Integer> maps = new HashMap<>(); maps.put("娃娃",31); maps.put("iPhoneX",100);//Map集合后面重复的键对应的元素会覆盖前面重复的整个元素 maps.put("HUAWEI",1000); maps.put("生活用品",10); maps.put("手表",10); System.out.println(maps);
第一种遍历方法(键找值):
第一步:先拿到集合的全部键
第二步:遍历每个键,根据键提取值
Set<String> keys = maps.keySet();
for (String key : keys) {
int value = maps.get(key);
System.out.println(key + "===>" +value);
}
第二种遍历方法:
(键值对)把Map集合转换成Set集合,在用foreach遍历
Set<Map.Entry<String , Integer>> entries = maps.entrySet();
//开始遍历
for(Map.Entry<String , Integer> entry : entries){
String key = entry.getKey();
int value = entry.getValue();
System.out.println(key + "===>" +value);
}
第三种遍历方法:
Lambda表达式,简化代码
简化前
maps.forEach(new BiConsumer<String, Integer>() { @Override public void accept(String k, Integer v) { System.out.println(k + "--->" + v); } });
简化后:
maps.forEach((k,v)-> System.out.println(k + "===>" + v));
四、应用,案例
案例:统计投票人数
1.把8 个学生选择的数据拿过来
String[] selects = {"A","B","C","D"};
StringBuilder sb = new StringBuilder();
Random r = new Random();
for (int i = 0; i < 80; i++) {
sb.append(selects[r.nextInt(selects.length)]);
}
System.out.println(sb);
2.定义一个Map集合的记录最终统计的结果:A=30,B=20,C=20,D=10
Map<Character , Integer> infos = new HashMap<>();
3.遍历80个学生选择的数据
之后再进行判断
for (int i = 0; i < sb.length(); i++) {
//4.提取M当前选择景点字符
char ch = sb.charAt(i);
//5.判断Map集合中是否存在这个键
if(infos.containsKey(ch)){
//让其值 +1
infos.put(ch,infos.get(ch)+1);
}else{
//说明此景点是第一次被选
infos.put(ch,1);
}
}
4.总体代码演示:
String[] selects = {"A","B","C","D"};
StringBuilder sb = new StringBuilder();
Random r = new Random();
for (int i = 0; i < 80; i++) {
sb.append(selects[r.nextInt(selects.length)]);
}
System.out.println(sb);
Map<Character , Integer> infos = new HashMap<>();
for (int i = 0; i < sb.length(); i++) {
//4.提取M当前选择景点字符
char ch = sb.charAt(i);
//5.判断Map集合中是否存在这个键
if(infos.containsKey(ch)){
//让其值 +1
infos.put(ch,infos.get(ch)+1);
}else{
//说明此景点是第一次被选
infos.put(ch,1);
}
}