A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柳柳桑 黑马粉丝团   /  2015-12-25 11:30  /  8457 人查看  /  16 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文


入学基础day18笔记

18.01_集合框架(Map集合概述和特点)
  • A:Map接口概述
    • 查看API可以知道:
      • 将键映射到值的对象
      • 一个映射不能包含重复的键
      • 每个键最多只能映射到一个值
  • B:Map接口和Collection接口的不同
    • Map是双列的,Collection是单列的
    • Map的键唯一,Collection的子体系Set是唯一的
    • Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效

18.02_集合框架(Map集合的功能概述)
  • A:Map集合的功能概述
    • a:添加功能
      • V put(K key,V value):添加元素。
        • 如果键是第一次存储,就直接存储元素,返回null
        • 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
    • b:删除功能
      • void clear():移除所有的键值对元素
      • V remove(Object key):根据键删除键值对元素,并把值返回
    • c:判断功能
      • boolean containsKey(Object key):判断集合是否包含指定的键
      • boolean containsValue(Object value):判断集合是否包含指定的值
      • boolean isEmpty():判断集合是否为空
    • d:获取功能
      • Set<Map.Entry<K,V>> entrySet():
      • V get(Object key):根据键获取值
      • Set keySet():获取集合中所有键的集合
      • Collection values():获取集合中所有值的集合
    • e:长度功能
      • int size():返回集合中的键值对的个数

18.03_集合框架(Map集合的遍历之键找值)
  • A:键找值思路:
    • 获取所有键的集合
    • 遍历键的集合,获取到每一个键
    • 根据键找值
  • B:案例演示

    • Map集合的遍历之键找值
      1. HashMap<String, Integer> hm = new HashMap<>();
      2. hm.put("张三", 23);
      3. hm.put("李四", 24);
      4. hm.put("王五", 25);
      5. hm.put("赵六", 26);

      6. /*Set<String> keySet = hm.keySet();         //获取集合中所有的键
      7. Iterator<String> it = keySet.iterator();    //获取迭代器
      8. while(it.hasNext()) {                       //判断单列集合中是否有元素
      9.     String key = it.next();                 //获取集合中的每一个元素,其实就是双列集合中的键
      10.     Integer value = hm.get(key);            //根据键获取值
      11.     System.out.println(key + "=" + value);  //打印键值对
      12. }*/

      13. for(String key : hm.keySet()) {             //增强for循环迭代双列集合第一种方式
      14.     System.out.println(key + "=" + hm.get(key));
      15. }
      复制代码


18.04_集合框架(Map集合的遍历之键值对对象找键和值)
  • A:键值对对象找键和值思路:
    • 获取所有键值对对象的集合
    • 遍历键值对对象的集合,获取到每一个键值对对象
    • 根据键值对对象找键和值

  • B:案例演示

    • Map集合的遍历之键值对对象找键和值
      1. HashMap<String, Integer> hm = new HashMap<>();
      2. hm.put("张三", 23);
      3. hm.put("李四", 24);
      4. hm.put("王五", 25);
      5. hm.put("赵六", 26);
      6. /*Set<Map.Entry<String, Integer>> entrySet = hm.entrySet(); //获取所有的键值对象的集合
      7. Iterator<Entry<String, Integer>> it = entrySet.iterator();//获取迭代器
      8. while(it.hasNext()) {
      9.     Entry<String, Integer> en = it.next();              //获取键值对对象
      10.     String key = en.getKey();                               //根据键值对对象获取键
      11.     Integer value = en.getValue();                          //根据键值对对象获取值
      12.     System.out.println(key + "=" + value);
      13. }*/

      14. for(Entry<String,Integer> en : hm.entrySet()) {
      15.     System.out.println(en.getKey() + "=" + en.getValue());
      16. }
      复制代码

C:源码分析

18.05_集合框架(HashMap集合键是Student值是String的案例)
  • A:案例演示
    • HashMap集合键是Student值是String的案例

18.06_集合框架(LinkedHashMap的概述和使用)
  • A:案例演示
    • LinkedHashMap的特点
      • 底层是链表实现的可以保证怎么存就怎么取

18.07_集合框架(TreeMap集合键是Student值是String的案例)
  • A:案例演示
    • TreeMap集合键是Student值是String的案例

18.08_集合框架(统计字符串中每个字符出现的次数)
  • A:案例演示

    • 需求:统计字符串中每个字符出现的次数 String str = "aaaabbbcccccccccc"; char[] arr = str.toCharArray();        //将字符串转换成字符数组 HashMap<Character, Integer> hm = new HashMap<>();        //创建双列集合存储键和值
      1. for(char c : arr) {                                 //遍历字符数组
      2.     /*if(!hm.containsKey(c)) {                      //如果不包含这个键
      3.         hm.put(c, 1);                               //就将键和值为1添加
      4.     }else {                                         //如果包含这个键
      5.         hm.put(c, hm.get(c) + 1);                   //就将键和值再加1添加进来
      6.     }

      7.     //hm.put(c, !hm.containsKey(c) ? 1 : hm.get(c) + 1);
      8.     Integer i = !hm.containsKey(c) ? hm.put(c, 1) : hm.put(c, hm.get(c) + 1);
      9.             }

      10. for (Character key : hm.keySet()) {                 //遍历双列集合
      11.     System.out.println(key + "=" + hm.get(key));
      12. }
      复制代码


18.09_集合框架(集合嵌套之HashMap嵌套HashMap)
  • A:案例演示
    • 集合嵌套之HashMap嵌套HashMap

18.10_集合框架(HashMap和Hashtable的区别)
  • A:面试题
    • HashMap和Hashtable的区别
      • Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高
      • Hashtable不可以存储null键和null值,HashMap可以存储null键和null值
  • B:案例演示
    • HashMap和Hashtable的区别

18.11_集合框架(Collections工具类的概述和常见方法讲解)
  • A:Collections类概述
    • 针对集合操作 的工具类
  • B:Collections成员方法
    1. public static <T> void sort(List<T> list)
    2. public static <T> int binarySearch(List<?> list,T key)
    3. public static <T> T max(Collection<?> coll)
    4. public static void reverse(List<?> list)
    5. public static void shuffle(List<?> list)
    复制代码

18.12_集合框架(模拟斗地主洗牌和发牌)
  • A:案例演示

    • 模拟斗地主洗牌和发牌,牌没有排序
      1. //买一副扑克
      2. String[] num = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
      3. String[] color = {"方片","梅花","红桃","黑桃"};
      4. ArrayList<String> poker = new ArrayList<>();

      5. for(String s1 : color) {
      6.     for(String s2 : num) {
      7.         poker.add(s1.concat(s2));
      8.     }
      9. }

      10. poker.add("小王");
      11. poker.add("大王");
      12. //洗牌
      13. Collections.shuffle(poker);
      14. //发牌
      15. ArrayList<String> gaojin = new ArrayList<>();
      16. ArrayList<String> longwu = new ArrayList<>();
      17. ArrayList<String> me = new ArrayList<>();
      18. ArrayList<String> dipai = new ArrayList<>();

      19. for(int i = 0; i < poker.size(); i++) {
      20.     if(i >= poker.size() - 3) {
      21.         dipai.add(poker.get(i));
      22.     }else if(i % 3 == 0) {
      23.         gaojin.add(poker.get(i));
      24.     }else if(i % 3 == 1) {
      25.         longwu.add(poker.get(i));
      26.     }else {
      27.         me.add(poker.get(i));
      28.     }
      29. }

      30. //看牌

      31. System.out.println(gaojin);
      32. System.out.println(longwu);
      33. System.out.println(me);
      34. System.out.println(dipai);
      复制代码


18.13_集合框架(模拟斗地主洗牌和发牌并对牌进行排序的原理图解)
  • A:画图演示
    • 画图说明排序原理

18.14_集合框架(模拟斗地主洗牌和发牌并对牌进行排序的代码实现)
  • A:案例演示
    • 模拟斗地主洗牌和发牌并对牌进行排序的代码实现
    1.     //买一副牌
    2.     String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
    3.     String[] color = {"方片","梅花","红桃","黑桃"};
    4.     HashMap<Integer, String> hm = new HashMap<>();          //存储索引和扑克牌
    5.     ArrayList<Integer> list = new ArrayList<>();            //存储索引
    6.     int index = 0;                                          //索引的开始值
    7.     for(String s1 : num) {
    8.         for(String s2 : color) {
    9.             hm.put(index, s2.concat(s1));                   //将索引和扑克牌添加到HashMap中
    10.             list.add(index);                                //将索引添加到ArrayList集合中
    11.             index++;
    12.         }
    13.     }
    14.     hm.put(index, "小王");
    15.     list.add(index);
    16.     index++;
    17.     hm.put(index, "大王");
    18.     list.add(index);
    19.     //洗牌
    20.     Collections.shuffle(list);
    21.     //发牌
    22.     TreeSet<Integer> gaojin = new TreeSet<>();
    23.     TreeSet<Integer> longwu = new TreeSet<>();
    24.     TreeSet<Integer> me = new TreeSet<>();
    25.     TreeSet<Integer> dipai = new TreeSet<>();

    26.     for(int i = 0; i < list.size(); i++) {
    27.         if(i >= list.size() - 3) {
    28.             dipai.add(list.get(i));                         //将list集合中的索引添加到TreeSet集合中会自动排序
    29.         }else if(i % 3 == 0) {
    30.             gaojin.add(list.get(i));
    31.         }else if(i % 3 == 1) {
    32.             longwu.add(list.get(i));
    33.         }else {
    34.             me.add(list.get(i));
    35.         }
    36.     }

    37.     //看牌
    38.     lookPoker("高进", gaojin, hm);
    39.     lookPoker("龙五", longwu, hm);
    40.     lookPoker("冯佳", me, hm);
    41.     lookPoker("底牌", dipai, hm);

    42. }

    43. public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer, String> hm) {
    44.     System.out.print(name + "的牌是:");
    45.     for (Integer index : ts) {
    46.         System.out.print(hm.get(index) + " ");
    47.     }

    48.     System.out.println();
    49. }
    复制代码

18.15_集合框架(泛型固定下边界)
  • ? super E

18.16_day18总结
  • 把今天的知识点总结一遍。

16 个回复

倒序浏览
努力,奋斗,要不然跟一条咸鱼有什么分别!!!
回复 使用道具 举报
内容很多,就是缺少点代码
回复 使用道具 举报
回来复习复习基础,准备准备入学、
回复 使用道具 举报
这个比较非常方便
回复 使用道具 举报
好get!!加油
回复 使用道具 举报
感觉好牛逼的样子
回复 使用道具 举报
babysa 中级黑马 2016-7-30 10:33:55
8#
棒棒哒  赞赞赞赞赞赞赞赞赞赞赞赞
回复 使用道具 举报
好东西拿走了~
回复 使用道具 举报
内容很多,就是缺少点代码
回复 使用道具 举报
Wangyk 中级黑马 2016-11-21 18:09:50
11#
看一遍视频,然后看着这个,敲一遍代码,3个点的量,酸爽啊.
回复 使用道具 举报
感觉好牛逼的样子
回复 使用道具 举报
加油!加油
回复 使用道具 举报
又来啦,来啦来啦来啦
回复 使用道具 举报
回复 使用道具 举报
努力努力再努力,奋斗奋斗再奋斗
回复 使用道具 举报
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马