###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());}
      复制代码

###18.05_集合框架(Map集合遍历的两种方式比较图解)

  • A:画图演示

    • Map集合遍历的两种方式比较

###18.06_集合框架(HashMap集合键是Student值是String的案例)

  • A:案例演示

    • HashMap集合键是Student值是String的案例

###18.07_集合框架(LinkedHashMap的概述和使用)

  • A:案例演示

    • LinkedHashMap的特点

      • 底层是链表实现的可以保证怎么存就怎么取

###18.08_集合框架(TreeMap集合键是Student值是String的案例)

  • A:案例演示

    • TreeMap集合键是Student值是String的案例

###18.09_集合框架(统计字符串中每个字符出现的次数)

  • 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.12_集合框架(集合嵌套之HashMap嵌套HashMap)

  • A:案例演示

    • 集合嵌套之HashMap嵌套HashMap

###18.13_集合框架(HashMap和Hashtable的区别)

  • A:面试题

    • HashMap和Hashtable的区别

      • Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高
      • Hashtable不可以存储null键和null值,HashMap可以存储null键和null值
  • B:案例演示
    • HashMap和Hashtable的区别

###18.14_集合框架(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.15_集合框架(模拟斗地主洗牌和发牌)

  • 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.16_集合框架(模拟斗地主洗牌和发牌并对牌进行排序的原理图解)

  • A:画图演示

    • 画图说明排序原理

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

  • 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();}
    复制代码

转载于:https://juejin.im/post/5a30ffab6fb9a0450a6757e1

Java基础笔记18相关推荐

  1. java基础笔记(18)包和导入、权限修饰符、单例模式

    一. 包和导入 关键字:package.import 包的概念: 包的本质就是文件夹,是对项目中的类进行管理的.在代码中,用package明确当前类所在的包. 注:package必须出现在类的第一行 ...

  2. Java基础笔记 – 枚举类型的使用介绍和静态导入

    Java基础笔记 – 枚举类型的使用介绍和静态导入 本文由 arthinking 发表于404 天前 ⁄ Java基础 ⁄ 暂无评论 ⁄ 被围观 1,433 views+ 1.枚举(Enum): JD ...

  3. Java基础笔记23-集合练习题

    Java基础笔记23-集合练习题 定义一个集合,实现去重复的功能 定义一个数组,数组中存放的是图片的后缀,给一个文件的名字,判断是否是图片 定义一个带有数字和字符串的集合,使用迭代器进行迭代,只输出字 ...

  4. Java基础笔记(2)——HashMap的源码,实现原理,底层结构是怎么样的

    Java基础笔记(2)--HashMap的源码,实现原理,底层结构是怎么样的 HashMap的源码,实现原理,底层结构 1.HashMap: HashMap是基于哈希表的 Map 接口的实现.此实现提 ...

  5. Java基础笔记(14)—— Java的基础类型和字节大小

    Java基础笔记(14)-- Java的基础类型和字节大小 Java基础笔记(14)-- Java的基础类型和字节大小 Java语言提供了八种基本类型.六种数字类型(四个整数型(默认是int 型),两 ...

  6. Java基础笔记6——File、流、枚举、断言

    Java基础笔记6 十一.File 代表文件或目录的类. 所表示的文件或目录在计算机中不一定真实存在. 绝对路径:以盘符或者/开头的路径--不以当前路径为基准,直接跳转到指定的位置 相对路径:不以盘符 ...

  7. Java基础笔记(4w字长文警告)

    Java核心笔记 提示:点击右上角关注博主,收获共同话题 下面是我的个人学习Java的笔记,现在分享给广大友友: 文章目录 Java核心笔记 0.导论 标柱注释: 学习方法: 1 java概述 1.1 ...

  8. 自学java基础笔记

    java基础教程 基础字符 public  公共的 class 类 static 静态的 void 无返回类型 main 主要的 String 字符串 args 参数 System 系统的 out 输 ...

  9. 【Java基础笔记】类型转换

    目录 前言 类型转换(基本数据类型) 1.自动类型转换 2.强制类型转换 前言 该文章为Java基础自学笔记 其他内容:Java基础学习笔记目录 学习用书: <Java核心技术 卷Ⅰ 基础知识( ...

最新文章

  1. 文档管理服务器文件的脱机编辑选项无法编辑,让MOSS2007文档的存取更具个性
  2. python详细安装步骤-Python的详细安装步骤
  3. Simulink仿真 第八节 积分模块
  4. GPU视频解码之CUVID
  5. python获取城市天气数据案例
  6. IE 11 和360浏览器不能安装网银控件
  7. [云炬商业计划书阅读分享]无水洗车市场推广策划书
  8. 计算机专业新老生交流会ppt,铜陵学院实践部新老生交流会.ppt
  9. lisp删除块中图元_DeleteBlocks
  10. android9开发者模式 s8,Android 9.0或加速Galaxy S8/9电池消耗 谨慎更新
  11. Python内置函数max()高级用法
  12. Oracle完全手册,Oracle_11g+Oracle Sqldeveloper 安装完全手册(for win 7 64x)
  13. 使用Hexo+Github一步步搭建属于自己的博客(基础)
  14. JDBC:数据库操作:处理大对象CLOB数据
  15. 三层交换机VLAN间路由
  16. CBD将建智慧城市管理平台
  17. 如何禁止文本框输入,但是要传值
  18. Crontab 实例
  19. 2018年A题高温作业专用服装的设计论文与代码
  20. 【开发工具】Window下MinGW下载安装gcc,g++编译器

热门文章

  1. python线下培训-Python培训线上和线下有什么区别?
  2. 在gitee下使用git克隆企业仓库
  3. LeetCode Partition Equal Subset Sum(动态规划)
  4. LeetCode Top K Frequent Elements
  5. 网络编程学习笔记(RES_USE_INET6解析器选项)
  6. 20年研发管理经验谈(十六)
  7. Spring Boot使用mongo的GridFS模块
  8. tensorflow 对csv数据进行批量获取
  9. 问题.beego路由设置及请求参数传递
  10. 俄罗斯最新开源的牛掰数据库ClickHouse