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. 无法运行 vue-manage-system@3.1.0 dev: `webpack-dev-server --inline --progress --

    一个项目的变大好多人开发,难免会有很多的冲突.每次跟新代码都要一个坑一个坑的解决的.这次遇到这个坑好大.急死了.... 百度了好多说占用端口,试了好几遍不行.最终还是要去查原因的....经过了几个小时 ...

  2. vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解

    做后端管理系统,永远是最蛋疼.最复杂也最欠揍的事情,也永远是前端开发人员最苦逼.最无奈也最尿性的时刻.蛋疼的是需求变幻无穷,如同二师兄的三十六般变化:复杂的是开发难度寸步难行,如同蜀道难,难于上青天: ...

  3. 使用COOKIE实现登录 VS 使用SESSION实现登录

    注:本文使用的代码基于PHP,其他语言逻辑同理. 一:使用COOKIE实现登录验证 使用cookie实现登录的方式,主要通过一些单向的加密信息进行验证.比如admin用户登录了之后,服务端生成一个co ...

  4. Vue(MVVM)、React(MVVM)、Angular(MVC)对比

    前言 昨天阿里内推电面一面,面试官了解到项目中用过Vue,就问为什么前端框架使用Vue而不适用其他的框架,当时就懵了.因为只用过Vue,不了解其他两个框架,今天就赶紧去了解一下他们之间的区别.大家发现 ...

  5. 【逆元】HDU-1576

    逆元: 同余方程 ax≡1(mod n),gcd(a,n) = 1 时有解,这时称求出的 x 为 a 的对模n的乘法逆元.(注意:如果gcd(a,n)如果不等于1则无解),解法还是利用扩展欧几里得算法 ...

  6. Javascript高级编程学习笔记(86)—— Canvas(3)绘制矩形

    绘制矩形 矩形是唯一一种可以直接在2D上下文中绘制的形状. 与矩形有关的方法包括: fillRect() strokeRect() clearRect() 上述方法都接收四个参数: 绘制矩形的 X 坐 ...

  7. [Swift]LeetCode63. 不同路径 II | Unique Paths II

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  8. [Swift]LeetCode74. 搜索二维矩阵 | Search a 2D Matrix

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  9. [Swift]LeetCode833. 字符串中的查找与替换 | Find And Replace in String

    To some string S, we will perform some replacement operations that replace groups of letters with ne ...

  10. Oracle synonym 同义词

    Oracle synonym 同义词 1.Oracle synonym 同义词是数据库当前用户通过给另外一个用户的对象创建一个别名,然后可以通过对别名进行查询和操作,等价于直接操作该数据库对象. 2. ...