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集合的遍历之键找值

        HashMap<String, Integer> hm = new HashMap<>();
      hm.put("张三", 23);
      hm.put("李四", 24);
      hm.put("王五", 25);
      hm.put("赵六", 26); /*Set<String> keySet = hm.keySet(); //获取集合中所有的键
      Iterator<String> it = keySet.iterator(); //获取迭代器
      while(it.hasNext()) { //判断单列集合中是否有元素
      String key = it.next(); //获取集合中的每一个元素,其实就是双列集合中的键
      Integer value = hm.get(key); //根据键获取值
      System.out.println(key + "=" + value); //打印键值对
      }*/ for(String key : hm.keySet()) { //增强for循环迭代双列集合第一种方式
      System.out.println(key + "=" + hm.get(key));
      }

18.04_集合框架(Map集合的遍历之键值对对象找键和值)

  • A:键值对对象找键和值思路:

    • 获取所有键值对对象的集合
    • 遍历键值对对象的集合,获取到每一个键值对对象
    • 根据键值对对象找键和值
  • B:案例演示
    • Map集合的遍历之键值对对象找键和值

        HashMap<String, Integer> hm = new HashMap<>();
      hm.put("张三", 23);
      hm.put("李四", 24);
      hm.put("王五", 25);
      hm.put("赵六", 26);
      /*Set<Map.Entry<String, Integer>> entrySet = hm.entrySet(); //获取所有的键值对象的集合
      Iterator<Entry<String, Integer>> it = entrySet.iterator();//获取迭代器
      while(it.hasNext()) {
      Entry<String, Integer> en = it.next(); //获取键值对对象
      String key = en.getKey(); //根据键值对对象获取键
      Integer value = en.getValue(); //根据键值对对象获取值
      System.out.println(key + "=" + value);
      }*/ for(Entry<String,Integer> en : hm.entrySet()) {
      System.out.println(en.getKey() + "=" + en.getValue());
      }

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<>(); //创建双列集合存储键和值

        for(char c : arr) {									//遍历字符数组
      /*if(!hm.containsKey(c)) { //如果不包含这个键
      hm.put(c, 1); //就将键和值为1添加
      }else { //如果包含这个键
      hm.put(c, hm.get(c) + 1); //就将键和值再加1添加进来
      } //hm.put(c, !hm.containsKey(c) ? 1 : hm.get(c) + 1);
      Integer i = !hm.containsKey(c) ? hm.put(c, 1) : hm.put(c, hm.get(c) + 1);
      } for (Character key : hm.keySet()) { //遍历双列集合
      System.out.println(key + "=" + hm.get(key));
      }

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成员方法
  •   public static <T> void sort(List<T> list)
    public static <T> int binarySearch(List<?> list,T key)
    public static <T> T max(Collection<?> coll)
    public static void reverse(List<?> list)
    public static void shuffle(List<?> list)

18.12_集合框架(模拟斗地主洗牌和发牌)

  • A:案例演示

    • 模拟斗地主洗牌和发牌,牌没有排序

        //买一副扑克
      String[] num = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
      String[] color = {"方片","梅花","红桃","黑桃"};
      ArrayList<String> poker = new ArrayList<>(); for(String s1 : color) {
      for(String s2 : num) {
      poker.add(s1.concat(s2));
      }
      } poker.add("小王");
      poker.add("大王");
      //洗牌
      Collections.shuffle(poker);
      //发牌
      ArrayList<String> gaojin = new ArrayList<>();
      ArrayList<String> longwu = new ArrayList<>();
      ArrayList<String> me = new ArrayList<>();
      ArrayList<String> dipai = new ArrayList<>(); for(int i = 0; i < poker.size(); i++) {
      if(i >= poker.size() - 3) {
      dipai.add(poker.get(i));
      }else if(i % 3 == 0) {
      gaojin.add(poker.get(i));
      }else if(i % 3 == 1) {
      longwu.add(poker.get(i));
      }else {
      me.add(poker.get(i));
      }
      } //看牌 System.out.println(gaojin);
      System.out.println(longwu);
      System.out.println(me);
      System.out.println(dipai);

18.13_集合框架(模拟斗地主洗牌和发牌并对牌进行排序的原理图解)

  • A:画图演示

    • 画图说明排序原理

18.14_集合框架(模拟斗地主洗牌和发牌并对牌进行排序的代码实现)

  • A:案例演示

    • 模拟斗地主洗牌和发牌并对牌进行排序的代码实现
  •   	//买一副牌
    String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
    String[] color = {"方片","梅花","红桃","黑桃"};
    HashMap<Integer, String> hm = new HashMap<>(); //存储索引和扑克牌
    ArrayList<Integer> list = new ArrayList<>(); //存储索引
    int index = 0; //索引的开始值
    for(String s1 : num) {
    for(String s2 : color) {
    hm.put(index, s2.concat(s1)); //将索引和扑克牌添加到HashMap中
    list.add(index); //将索引添加到ArrayList集合中
    index++;
    }
    }
    hm.put(index, "小王");
    list.add(index);
    index++;
    hm.put(index, "大王");
    list.add(index);
    //洗牌
    Collections.shuffle(list);
    //发牌
    TreeSet<Integer> gaojin = new TreeSet<>();
    TreeSet<Integer> longwu = new TreeSet<>();
    TreeSet<Integer> me = new TreeSet<>();
    TreeSet<Integer> dipai = new TreeSet<>(); for(int i = 0; i < list.size(); i++) {
    if(i >= list.size() - 3) {
    dipai.add(list.get(i)); //将list集合中的索引添加到TreeSet集合中会自动排序
    }else if(i % 3 == 0) {
    gaojin.add(list.get(i));
    }else if(i % 3 == 1) {
    longwu.add(list.get(i));
    }else {
    me.add(list.get(i));
    }
    } //看牌
    lookPoker("高进", gaojin, hm);
    lookPoker("龙五", longwu, hm);
    lookPoker("冯佳", me, hm);
    lookPoker("底牌", dipai, hm); } public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer, String> hm) {
    System.out.print(name + "的牌是:");
    for (Integer index : ts) {
    System.out.print(hm.get(index) + " ");
    } System.out.println();
    }

18.15_集合框架(泛型固定下边界)

  • ? super E

18.16_day18总结

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

【Java基础】【18Map集合&模拟斗D主X排和F排】的更多相关文章

  1. Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

    Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...

  2. 备战金三银四!一线互联网公司java岗面试题整理:Java基础+多线程+集合+JVM合集!

    前言 回首来看2020年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求 ...

  3. java基础-Map集合

    java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...

  4. 第6节:Java基础 - 三大集合(上)

    第6节:Java基础 - 三大集合(上) 本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和C ...

  5. java基础技术集合面试【笔记】

    java基础技术集合面试[笔记] Hashmap: 基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键(除了不同步和允许使用 null 之外,Ha ...

  6. Java基础--说集合框架

    版权所有,转载注明出处. 1,Java中,集合是什么?为什么会出现? 根据数学的定义,集合是一个元素或多个元素的构成,即集合一个装有元素的容器. Java中已经有数组这一装有元素的容器,为什么还要新建 ...

  7. JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

    森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397  文章- 0  评论- 78  JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...

  8. 《回炉重造 Java 基础》——集合(容器)

    整体框架 绿色代表接口/抽象类:蓝色代表类. 主要由两大接口组成,一个是「Collection」接口,另一个是「Map」接口. 前言 以前刚开始学习「集合」的时候,由于没有好好预习,也没有学好基础知识 ...

  9. java基础之集合长度可变的实现原理

    首先我们要明白java中的集合Collection,List,ArrayList之间的关系: ArrayList是具体的实现类,实现了List接口 List是接口,继承了Collection接口 Li ...

随机推荐

  1. yum的一些命令使用方法

    yum 选项 参数 yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装 ...

  2. 2019年3月2日-小雨.md

    2019年3月2日, 星期六 开学已经一周了,时间好像限制了自己进步的脚步,一个人的精力有限,想做好方方面面实在是太难了,有很多事儿最后都没做的完美.相反,自己应该放下繁琐的包袱,简简单单的干一件事儿 ...

  3. 【安全性测试】解决关于appscan基于登录会话检测失败问题

    有些问题久了忽然就想通怎么解决了,很神奇.这次要说的是,关于appscan无法检测到会话的问题,因为在百度上一直找不到相关的解决方法,这个问题困扰了我很久,今天终于找到方法解决了! 日常配置扫描内容: ...

  4. Java 基础 JRE和JDK的区别

    JRE(Java Runtime Environment,Java运行时环境)是Java程序运行所需的软件环境,包含Java虚拟机和Java基础类库. JDK(Java Development Kit ...

  5. MUI消息推送

    一.push通过H5+实现 简单实现方式:通过轮询服务器是否有新消息推送过来 mui.plusReady(function() { plus.navigator.closeSplashscreen() ...

  6. jmeter学习笔记(一)

    1.添加JSON Path Extractor >>下载地址:http://jmeter-plugins.org/downloads/all/,下载 JMeterPlugins-Extra ...

  7. Burp Suite Pro 教程

    1.Burp Suite Pro2.0.11破解版-2018.11.06更新 说明基地址 来源:http://ximcx.cn/post-110.html 启动;如果是用的burp2.0,把下面的代码 ...

  8. unittest批量执行测试用例

    现有四个测试用例分别在两个.py文件中,如何执行这些文件? unittest中有这样处理:unittest.TestLoader().discover() 第一个文件test_case1.py fro ...

  9. LeetCode编程训练 - 合并查找(Union Find)

    Union Find算法基础 Union Find算法用于处理集合的合并和查询问题,其定义了两个用于并查集的操作: Find: 确定元素属于哪一个子集,或判断两个元素是否属于同一子集 Union: 将 ...

  10. [Java]LeetCode141. 环形链表 | Linked List Cycle

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...