本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。
01 概述
Map
集合也被叫做 “键值对集合” ,格式为{key1=value1,key2=value2,key3=value3,...}
。
Map
集合的所有键是不允许重复的,但值可以重复,键和值是一一对应的,每一个键只能找到自己对应的值。
注:Map
系列集合的特点都是由键决定的,值只是附属品,不做要求。
HashMap
:无序、不重复、无索引LinkedHashMap
:有序、不重复、无索引TreeMap
:默认升序、不重复、无索引
package MapDemo;import java.util.HashMap;
import java.util.Map;public class MapDemo1 {public static void main(String[] args) {//HashMap 无序,不重复,无索引Map<String, Integer> map = new HashMap<>();map.put("张三", 1);map.put("李四", 5);map.put("王五", 7);map.put("赵六", 3);map.put(null, null);System.out.println(map);//LinkedHashMap 有序,不重复,无索引//TreeMap 默认升序,不重复,无索引}
}
02 常用方法
package MapDemo;import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class MapDemo2 {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("张三", 1);map.put("李四", 5);map.put("王五", 7);map.put("赵六", 3);map.put(null, null);System.out.println(map);//常用方法System.out.println(map.size());System.out.println(map.get("王五")); //7System.out.println(map.remove("赵六"));System.out.println(map.containsKey("王五")); //trueSystem.out.println(map.containsValue(5)); //truemap.clear();System.out.println(map.isEmpty());Set<String> keys = map.keySet();for(String key : keys){System.out.println(key);}Collection<Integer> values = map.values();for(Integer value : values){System.out.println(value);}}
}
03 遍历方式
① 键找值
先获取Map集合全部的键,再通过遍历键来找值
Set<String> keys = map.keySet();for(String key : keys){Integer value = map.get(key);System.out.println(key + "=" + value);
}
② 键值对
把“键值对“看成一个整体进行遍历(难度较大)
//{null=null, 李四=5, 张三=1, 王五=7, 赵六=3}
//[(null=null), (李四=5), (张三=1), (王五=7), (赵六=3)]Set<Map.Entry<String, Integer>> entries = map.entrySet();
for(Map.Entry<String, Integer> entry : entries){String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + "=" + value);
}
③ Lambda表达式
map.forEach(new BiConsumer<String, Integer>() {
@Override
public void accept(String key, Integer value) {System.out.println(key + "=" + value);}
});map.forEach((key, value) -> {System.out.println(key + "=" + value);}
);
04 案例:统计投票信息
某个班级80
名学生,现在需要组织秋游活动,班长提供了四个景点依次是(A、B、C、D)
,每个学生只能选择一个景点,请统计出最终哪个景点想去的人数最多。
package MapDemo;import java.util.*;public class MapTest {public static void main(String[] args) {//案例:统计投票信息calc();}public static void calc(){//1.创建一个List集合和地点名称数组,统计每个学生的目的地选择(random)List<String> locations = new ArrayList<>();String[] places = {"玉龙雪山","苍山","洱海","丽江古城"};Random r = new Random();for(int i=1; i<=80; i++){int index = r.nextInt(places.length);locations.add(places[index]);}System.out.println(locations);//2.创建一个Map集合,遍历List集合,统计每个目的地选择的次数Map<String, Integer> map = new HashMap<>();for(String location : locations){if(map.containsKey(location)){map.put(location, map.get(location)+1);;}else{map.put(location, 1);}}//3.遍历Map集合,打印Set<String> keys = map.keySet();for(String key : keys){Integer value = map.get(key);System.out.println(key + "被选择了" + value + "次");}}
}