安徽网站优化好不好,中学网站建设工作实施方案,网站建设咨询公司推荐,怎么创建自己的域名一、Map集合
1.1 Map概述体系 各位同学#xff0c;前面我们已经把单列集合学习完了#xff0c;接下来我们要学习的是双列集合。首先我们还是先认识一下什么是双列集合。
所谓双列集合#xff0c;就是说集合中的元素是一对一对的。Map集合中的每一个元素是以keyvalue的形式…一、Map集合
1.1 Map概述体系 各位同学前面我们已经把单列集合学习完了接下来我们要学习的是双列集合。首先我们还是先认识一下什么是双列集合。
所谓双列集合就是说集合中的元素是一对一对的。Map集合中的每一个元素是以keyvalue的形式存在的一个keyvalue就称之为一个键值对而且在Java中有一个类叫Entry类Entry的对象用来表示键值对对象。
所有的Map集合有如下的特点键不能重复值可以重复每一个键只能找到自己对应的值。
下面我们先写一个Map集合保存几个键值对体验一下Map集合的特点
public class MapTest1 {public static void main(String[] args) {// MapString, Integer map new HashMap(); // 一行经典代码。 按照键 无序不重复无索引。MapString, Integer map new LinkedHashMap(); // 有序不重复无索引。map.put(手表, 100);map.put(手表, 220); // 后面重复的数据会覆盖前面的数据键map.put(手机, 2);map.put(Java, 2);map.put(null, null);System.out.println(map);MapInteger, String map1 new TreeMap(); // 可排序不重复无索引map1.put(23, Java);map1.put(23, MySQL);map1.put(19, 李四);map1.put(20, 王五);System.out.println(map1);}
}Map集合也有很多种在Java中使用不同的类来表示的每一种Map集合其键的特点是有些差异的值是键的一个附属值所以我们只关注键的特点就可以了。
1.2 Map集合的常用方法
接下来我们学习一下Map集合提供了那些方法供我们使用。由于Map是所有双列集合的父接口所以我们只需要学习Map接口中每一个方法是什么含义那么所有的Map集合方法你就都会用了。
public class MapTest2 {public static void main(String[] args) {// 1.添加元素: 无序不重复无索引。MapString, Integer map new HashMap();map.put(手表, 100);map.put(手表, 220);map.put(手机, 2);map.put(Java, 2);map.put(null, null);System.out.println(map);// map {nullnull, 手表220, Java2, 手机2}// 2.public int size():获取集合的大小System.out.println(map.size());// 3、public void clear():清空集合//map.clear();//System.out.println(map);// 4.public boolean isEmpty(): 判断集合是否为空为空返回true ,反之System.out.println(map.isEmpty());// 5.public V get(Object key)根据键获取对应值int v1 map.get(手表);System.out.println(v1);System.out.println(map.get(手机)); // 2System.out.println(map.get(张三)); // null// 6. public V remove(Object key)根据键删除整个元素(删除键会返回键的值)System.out.println(map.remove(手表));System.out.println(map);// 7.public boolean containsKey(Object key): 判断是否包含某个键 包含返回true ,反之System.out.println(map.containsKey(手表)); // falseSystem.out.println(map.containsKey(手机)); // trueSystem.out.println(map.containsKey(java)); // falseSystem.out.println(map.containsKey(Java)); // true// 8.public boolean containsValue(Object value): 判断是否包含某个值。System.out.println(map.containsValue(2)); // trueSystem.out.println(map.containsValue(2)); // false// 9.public SetK keySet(): 获取Map集合的全部键。SetString keys map.keySet();System.out.println(keys);// 10.public CollectionV values(); 获取Map集合的全部值。CollectionInteger values map.values();System.out.println(values);// 11.把其他Map集合的数据倒入到自己集合中来。(拓展)MapString, Integer map1 new HashMap();map1.put(java1, 10);map1.put(java2, 20);MapString, Integer map2 new HashMap();map2.put(java3, 10);map2.put(java2, 222);map1.putAll(map2); // putAll把map2集合中的元素全部倒入一份到map1集合中去。System.out.println(map1);System.out.println(map2);}
}public Set K keySet()为什么要返回一个Set集合 因为Map集合的键无序不重复无索引正好符合Set集合的特点 public Collection V values(); 获取Map集合的全部值。 因为Map集合的值是可以重复的所以选择放在Collection集合里面 1.3 Map集合遍历方式1
Map集合一共有三种遍历方式我们先来学习第一种他需要用到下面的两个方法
/*** 目标掌握Map集合的遍历方式1键找值*/
public class MapTest1 {public static void main(String[] args) {// 准备一个Map集合。MapString, Double map new HashMap();map.put(蜘蛛精, 162.5);map.put(蜘蛛精, 169.8);map.put(紫霞, 165.8);map.put(至尊宝, 169.5);map.put(牛魔王, 183.6);System.out.println(map);// map {蜘蛛精169.8, 牛魔王183.6, 至尊宝169.5, 紫霞165.8}// 1、获取Map集合的全部键SetString keys map.keySet();// System.out.println(keys);// [蜘蛛精, 牛魔王, 至尊宝, 紫霞]// key// 2、遍历全部的键根据键获取其对应的值for (String key : keys) {// 根据键获取对应的值double value map.get(key);System.out.println(key value);}}
}1.4 Map集合遍历方式2
接下来我们学习Map集合的第二种遍历方式这种遍历方式更加符合面向对象的思维。
前面我们给大家介绍过Map集合是用来存储键值对的而每一个键值对实际上是一个Entry对象。
这里Map集合的第二种方式是直接获取每一个Entry对象把Entry存储扫Set集合中去再通过Entry对象获取键和值。
/*** 目标掌握Map集合的第二种遍历方式键值对。*/
public class MapTest2 {public static void main(String[] args) {MapString, Double map new HashMap();map.put(蜘蛛精, 169.8);map.put(紫霞, 165.8);map.put(至尊宝, 169.5);map.put(牛魔王, 183.6);System.out.println(map);// map {蜘蛛精169.8, 牛魔王183.6, 至尊宝169.5, 紫霞165.8}// entries [(蜘蛛精169.8), (牛魔王183.6), (至尊宝169.5), (紫霞165.8)]// entry (蜘蛛精169.8)// entry (牛魔王183.6)// ...// 1、调用Map集合提供entrySet方法把Map集合转换成键值对类型的Set集合SetMap.EntryString, Double entries map.entrySet();for (Map.EntryString, Double entry : entries) {String key entry.getKey();double value entry.getValue();System.out.println(key ---- value);}}
}1.5 Map集合遍历方式3
Map集合的第三种遍历方式需要用到下面的一个方法forEach而这个方法是JDK8版本以后才有的。调用起来非常简单最好是结合的lambda表达式一起使用。
/*** 目标掌握Map集合的第二种遍历方式键值对。*/
public class MapTest3 {public static void main(String[] args) {MapString, Double map new HashMap();map.put(蜘蛛精, 169.8);map.put(紫霞, 165.8);map.put(至尊宝, 169.5);map.put(牛魔王, 183.6);System.out.println(map);// map {蜘蛛精169.8, 牛魔王183.6, 至尊宝169.5, 紫霞165.8}//遍历map集合传递匿名内部类map.forEach(new BiConsumerString, Double() {Overridepublic void accept(String k, Double v) {System.out.println(k ---- v);}});//遍历map集合传递Lambda表达式map.forEach(( k, v) - {System.out.println(k ---- v);});}
}1.6 Map集合案例
学习完Map集合的基本用法之后接下来我们做一个综合案例将Map集合运用一下。 先分析需求再考虑怎么用代码实现
1.首先可以将80个学生选择的景点放到一个集合中去也就是说集合中的元素是80个任意的ABCD元素
2.准备一个Map集合用来存储景点以及景点被选择的次数
3.遍历80个学生选择景点的集合得到每一个景点判断Map集合中是否包含该景点如果不包含则存储景点1如果包含则存获取该景点原先的值再存储景点原来的值1; 此时新值会覆盖旧值/*** 目标完成Map集合的案例统计投票人数。*/
public class MapDemo4 {public static void main(String[] args) {// 1、把80个学生选择的景点数据拿到程序中来。ListString data new ArrayList();String[] selects {A, B, C, D};Random r new Random();for (int i 1; i 80; i) {// 每次模拟一个学生选择一个景点存入到集合中去。int index r.nextInt(4); // 0 1 2 3data.add(selects[index]);}System.out.println(data);// 2、开始统计每个景点的投票人数// 准备一个Map集合用于统计最终的结果MapString, Integer result new HashMap();// 3、开始遍历80个景点数据for (String s : data) {// 问问Map集合中是否存在该景点if(result.containsKey(s)){// 说明这个景点之前统计过。其值1. 存入到Map集合中去result.put(s, result.get(s) 1);}else {// 说明这个景点是第一次统计存入景点1result.put(s, 1);}}System.out.println(result);}
}