Map集合

传智播客-2019-v10-7-Map 预授课笔记

昨日知识点回顾
  • HashSet有什么特点?
    • 元素唯一(元素不重复)
    • 元素无序(元素存入的顺序和取出的顺序不一致)
  • LinkedHashSet有什么特点?
    • 元素唯一(元素不重复)
    • 元素有序(元素存入的顺序和取出的顺序是一致的[LinkedHashSet底层是链表+哈希表,哈希表保证元素的唯一,链表保证元素的有序])
  • TreeSet有什么特点?
    • 元素唯一(元素不重复)
    • 元素有序(元素按照某种规则进行排序)
      • 自然排序Comparable -> 无参构造,但是TreeSet中存储的元素所在的类要实现Comparable,完成里面的compareTo,在方法中书写排序规则.
      • 比较器排序Comparator -> 有参构造,一般使用匿名内部类的方式.
A.Map集合概述和特点 6分26秒 掌握
  • 知识点总结与问题回顾

    • Map接口的泛型<K,V>分别代表什么?

      • K -> 键(Key) -> 键的数据类型
      • V -> 值(Value) -> 值的数据类型
    • Map中的键有什么特点?

      • 键唯一,不重复(是由哈希表来保证的),键可以为null吗?键可以为null,但是只有一个null.
    • Map中的值有什么特点?

      • 值可以重复,值可以为null吗?可以,并且可以有多个null.
    • Map是接口,通过什么方式创建Map?

      • //多态的方式
        Map<K,V> map = new HashMap<>();
        
        //使用谁就创建谁
        HashMap<K,V> hashMap = new HashMap<>();
        
    • 如何将一个键和一个值存储到Map中?

      • 通过put(K key,V value);
    • 想要查看Map中的数据可以通过什么方式查看? -> 实现类是否重写了toString()方法.

      • 直接打印即可 -> 因为HashMap重写了toString()方法.
    • Map是有序的还是无序的? -> 拓展

      • HashMap是无序的(存入和取出的顺序不一致,因为底层是哈希表)
      • LinkedHashMap是有序(存入和取出的顺序一致,因为底层是哈希表+链表)
B.Map集合的基本功能 6分20秒 掌握
  • 知识点总结与问题回顾
    • 判断集合是否包含指定的键的方法是什么?
      • boolean containsKey(Object key) -> 如果键包含指定的参数则返回true,如果不包含指定的参数则返回false.
    • 判断集合是否包含指定的值的方法是什么?
      • boolean containsValue(Object value) -> 如果值包含指定的参数则返回true,如果不包含指定的参数则返回false.
    • remove(Object key) -> 删除参数与其对应的值,如果删除成功,则返回被删除掉的值,如果删除失败就返回null.
    • clear() -> 清空集合中的所有元素.
    • isEmpty() -> 判断集合是否为空/size() -> 获取集合的长度(获取集合中的元素个数)
  • 练习
    • 练习Map的常用方法 -> 10分钟
C.Map集合的获取功能 4分22秒 掌握 -> 集合中获取某个元素List -> get(索引) Set -> 遍历获取每个元素.
  • 知识点总结与问题回顾

    • Map中通过键获取值的方法是什么?
      • V get(Object key); -> 根据指定的键来获取对应的值,如果有的话,则返回对应的值,如果没有的话,则返回null.
    • Map中获取所有键的集合的方法是什么?返回值是什么类型?
      • keySet(); -> Set
    • Map中获取所有值的集合的方法是什么?返回值是什么类型?
      • values() -> Collection
  • 练习

    • map.put("永琪", "小燕子");
      map.put("尔康", "紫薇");
      map.put("乾隆", "皇后");
      map.put("小邓子", "小卓子");
      
      • 通过"小邓子"获取对应的值并打印.
      • 获取所有的键的集合,然后遍历打印到控制台,然后在每一次打印之后,通过get方法获取值也同样打印到控制台.
      • 获取所有值的集合,遍历后打印到控制台.
D.Map集合的遍历(方式1[纵向遍历]) 3分33秒 掌握
  • 知识点总结与问题回顾
    • Map遍历的方式1的流程是什么?
      • 获取所有键的集合 -> keySet() -> Set
      • 遍历Set集合,获取每一个键(增强For)
      • 通过每一次获取到的键,在通过map.get(Object key)获取key对应的值.
      • 这种遍历方式不推荐,相对于方式2来说,方式1步骤较为消耗系统性能.
E.Map集合的遍历(方式2[横向遍历]) 4分52秒 掌握
  • 知识点总结与问题回顾

    • Map遍历的方式2的流程是什么?
      • 获取所有键值对对象的集合 -> entrySet() -> Set<Map.Entry<K,V>>
      • 遍历集合,获取每一个键值对对象(增强For)
      • 通过每一次获取到键值对对象,再通过键值对对象的getKey/getValue方法获取到对应的键和值.
  • 练习

    • map.put("永琪", "小燕子");
      map.put("尔康", "紫薇");
      map.put("乾隆", "皇后");
      map.put("小邓子", "小卓子");
      
      • 通过entrySet的方式遍历所有对象,将每一个对象的键和值打印到控制台上 -> 10分钟
F.HashMap集合练习之键是String值是Student 5分27秒 练习
  • 练习
    • 创建学生类,将学生类作为值,String作为键,添加到Map中,然后使用两种方式进行遍历. -> 15分钟
G.HashMap集合练习之键是Student值是String 7分20秒 练习
  • Map的键是由Hash表来保证元素唯一的,和Set保证元素唯一的原理是一样的.
    • 如果说自定义的对象想要保持元素唯一,那么自定义对象所在的类要重写equals和hashCode方法.
    • 如果不重写,则对象的哈希值是根据地址值来生成的,即使属性一样,但是地址值不一样,所以哈希值还是不一样,系统认为这是两个不同的对象.
H.集合嵌套之ArrayList嵌套HashMap 8分39秒 练习
  • 练习
    • 创建一个ArrayList集合泛型为HashMap<String,String>,存储三个HashMap元素,遍历打印ArrayList中的每个HashMap中的键值对中的值到控制台.
I.集合嵌套之HashMap嵌套ArrayList 9分20秒 练习
  • 练习
    • 创建一个HashMap集合,存储三个键值对元素,键是String,值是ArrayList,值的泛型是String,遍历打印到控制台上.
J.统计字符串中每个字符出现的次数 11分10秒 练习 -> 之前
  • 知识点总结与问题回顾
    • 如果想要对Map中的键进行排序,应该使用Map接口的哪个实现类?
      • TreeMap -> HashMap如何定义,TreeMap就如何定义,TreeMap会对键进行自然排序.
    • 如何判断当前给定字符是否出现过?
      • map的键中是否已经包含了给定字符,map.containsKey© -> 如果返回值是true,则说明包含了给定字符(不是第一次出现) 如果返回值是false,则说明字符是第一次出现的.
K.Collections概述和使用 5分28秒 掌握 -> Arrays/Collections/Objects
  • 知识点总结与问题回顾
    • Collections是什么?
      • 是针对单列集合的工具类,里面包含了方便我们操作单列集合的方法.
    • 想要让List按照自然排序的方式进行排序,使用Collections中的哪个方法?
      • Collections.sort(List<?> list);
    • 将List列表反转使用Collections中的哪个方法?
      • Collections.reverse(List<?> list);
    • 打乱List列表中元素顺序的方法是哪个方法?
      • Collections.shuffle(List<?> list); (发牌)
L.ArrayList集合存储学生并排序 5分38秒 练习
  • 练习
    • ArrayList存储学生对象,使用Collections对ArrayList进行排序.
      • 按照年龄从小到大排序,如果年龄相同,则按照名字进行排序.
M.模拟斗地主 16分39秒 练习
N.模拟斗地主升级版案例分析 4分10秒 理解
O.模拟斗地主升级版代码实现 14分3秒 练习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值