作者:季沐测试笔记

原文地址https://www.cnblogs.com/testero/p/15228436.html

博客主页https://www.cnblogs.com/testero

1.Map集合

1.1Map集合概述和特点

  • Map集合概述

    interface Map<K,V>  K:键的类型;V:值的类型
  • Map集合的特点

    • 键值对映射关系
    • 一个键对应一个值
    • 键不能重复,值可以重复
    • 元素存取无序
  • Map集合的基本使用

    public class MapDemo01 {
    public static void main(String[] args) {
    //创建集合对象
    Map<String,String> map = new HashMap<String,String>(); //V put(K key, V value) 将指定的值与该映射中的指定键相关联
    map.put("test001","林青霞");
    map.put("test002","张曼玉");
    map.put("test003","王祖贤");
    map.put("test003","柳岩"); //输出集合对象
    System.out.println(map);
    }
    }

1.2Map集合的基本功能

  • 方法介绍

    方法名 说明
    V put(K key,V value) 添加元素
    V remove(Object key) 根据键删除键值对元素
    void clear() 移除所有的键值对元素
    boolean containsKey(Object key) 判断集合是否包含指定的键
    boolean containsValue(Object value) 判断集合是否包含指定的值
    boolean isEmpty() 判断集合是否为空
    int size() 集合的长度,也就是集合中键值对的个数
  • 示例代码

    public class MapDemo02 {
    public static void main(String[] args) {
    //创建集合对象
    Map<String,String> map = new HashMap<String,String>(); //V put(K key,V value):添加元素
    map.put("张无忌","赵敏");
    map.put("郭靖","黄蓉");
    map.put("杨过","小龙女"); //V remove(Object key):根据键删除键值对元素
    // System.out.println(map.remove("郭靖"));
    // System.out.println(map.remove("郭襄")); //void clear():移除所有的键值对元素
    // map.clear(); //boolean containsKey(Object key):判断集合是否包含指定的键
    // System.out.println(map.containsKey("郭靖"));
    // System.out.println(map.containsKey("郭襄")); //boolean isEmpty():判断集合是否为空
    // System.out.println(map.isEmpty()); //int size():集合的长度,也就是集合中键值对的个数
    System.out.println(map.size()); //输出集合对象
    System.out.println(map);
    }
    }

1.3Map集合的获取功能

  • 方法介绍

    方法名 说明
    V get(Object key) 根据键获取值
    Set keySet() 获取所有键的集合
    Collection values() 获取所有值的集合
    Set<Map.Entry<K,V>> entrySet() 获取所有键值对对象的集合
  • 示例代码

    public class MapDemo03 {
    public static void main(String[] args) {
    //创建集合对象
    Map<String, String> map = new HashMap<String, String>(); //添加元素
    map.put("张无忌", "赵敏");
    map.put("郭靖", "黄蓉");
    map.put("杨过", "小龙女"); //V get(Object key):根据键获取值
    // System.out.println(map.get("张无忌"));
    // System.out.println(map.get("张三丰")); //Set<K> keySet():获取所有键的集合
    // Set<String> keySet = map.keySet();
    // for(String key : keySet) {
    // System.out.println(key);
    // } //Collection<V> values():获取所有值的集合
    Collection<String> values = map.values();
    for(String value : values) {
    System.out.println(value);
    }
    }
    }

1.4Map集合的遍历(方式1)

  • 遍历思路

    • 我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合

      • 把所有的丈夫给集中起来
      • 遍历丈夫的集合,获取到每一个丈夫
      • 根据丈夫去找对应的妻子
  • 步骤分析

    • 获取所有键的集合。用keySet()方法实现
    • 遍历键的集合,获取到每一个键。用增强for实现
    • 根据键去找值。用get(Object key)方法实现
  • 代码实现

    public class MapDemo01 {
    public static void main(String[] args) {
    //创建集合对象
    Map<String, String> map = new HashMap<String, String>(); //添加元素
    map.put("张无忌", "赵敏");
    map.put("郭靖", "黄蓉");
    map.put("杨过", "小龙女"); //获取所有键的集合。用keySet()方法实现
    Set<String> keySet = map.keySet();
    //遍历键的集合,获取到每一个键。用增强for实现
    for (String key : keySet) {
    //根据键去找值。用get(Object key)方法实现
    String value = map.get(key);
    System.out.println(key + "," + value);
    }
    }
    }

1.5Map集合的遍历(方式2)

  • 遍历思路

    • 我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合

      • 获取所有结婚证的集合
      • 遍历结婚证的集合,得到每一个结婚证
      • 根据结婚证获取丈夫和妻子
  • 步骤分析

    • 获取所有键值对对象的集合

      • Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
    • 遍历键值对对象的集合,得到每一个键值对对象
      • 用增强for实现,得到每一个Map.Entry
    • 根据键值对对象获取键和值
      • 用getKey()得到键
      • 用getValue()得到值
  • 代码实现

    public class MapDemo02 {
    public static void main(String[] args) {
    //创建集合对象
    Map<String, String> map = new HashMap<String, String>(); //添加元素
    map.put("张无忌", "赵敏");
    map.put("郭靖", "黄蓉");
    map.put("杨过", "小龙女"); //获取所有键值对对象的集合
    Set<Map.Entry<String, String>> entrySet = map.entrySet();
    //遍历键值对对象的集合,得到每一个键值对对象
    for (Map.Entry<String, String> me : entrySet) {
    //根据键值对对象获取键和值
    String key = me.getKey();
    String value = me.getValue();
    System.out.println(key + "," + value);
    }
    }
    }

1.6Map集合的案例

1.6.1HashMap集合练习之键是String值是Student

  • 案例需求

    ​ 创建一个HashMap集合,键是学号(String),值是学生对象(Student)。存储三个键值对元素,并遍历

  • 代码实现

    • 学生类

      public class Student {
      private String name;
      private int age; public Student() {
      } public Student(String name, int age) {
      this.name = name;
      this.age = age;
      } public String getName() {
      return name;
      } public void setName(String name) {
      this.name = name;
      } public int getAge() {
      return age;
      } public void setAge(int age) {
      this.age = age;
      }
      }
    • 测试类

      /*
      需求:
      创建一个HashMap集合,键是学号(String),值是学生对象(Student)。存储三个键值对元素,并遍历 思路:
      1:定义学生类
      2:创建HashMap集合对象
      3:创建学生对象
      4:把学生添加到集合
      5:遍历集合
      方式1:键找值
      方式2:键值对对象找键和值
      */
      public class HashMapDemo {
      public static void main(String[] args) {
      //创建HashMap集合对象
      HashMap<String, Student> hm = new HashMap<String, Student>(); //创建学生对象
      Student s1 = new Student("林青霞", 30);
      Student s2 = new Student("张曼玉", 35);
      Student s3 = new Student("王祖贤", 33); //把学生添加到集合
      hm.put("test001", s1);
      hm.put("test002", s2);
      hm.put("test003", s3); //方式1:键找值
      Set<String> keySet = hm.keySet();
      for (String key : keySet) {
      Student value = hm.get(key);
      System.out.println(key + "," + value.getName() + "," + value.getAge());
      }
      System.out.println("--------"); //方式2:键值对对象找键和值
      Set<Map.Entry<String, Student>> entrySet = hm.entrySet();
      for (Map.Entry<String, Student> me : entrySet) {
      String key = me.getKey();
      Student value = me.getValue();
      System.out.println(key + "," + value.getName() + "," + value.getAge());
      }
      }
      }

1.6.2HashMap集合练习之键是Student值是String

  • 案例需求

    • 创建一个HashMap集合,键是学生对象(Student),值是居住地 (String)。存储多个元素,并遍历。
    • 要求保证键的唯一性:如果学生对象的成员变量值相同,我们就认为是同一个对象
  • 代码实现

    • 学生类

      public class Student {
      private String name;
      private int age; public Student() {
      } public Student(String name, int age) {
      this.name = name;
      this.age = age;
      } public String getName() {
      return name;
      } public void setName(String name) {
      this.name = name;
      } public int getAge() {
      return age;
      } public void setAge(int age) {
      this.age = age;
      } @Override
      public boolean equals(Object o) {
      if (this == o) return true;
      if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; if (age != student.age) return false;
      return name != null ? name.equals(student.name) : student.name == null;
      } @Override
      public int hashCode() {
      int result = name != null ? name.hashCode() : 0;
      result = 31 * result + age;
      return result;
      }
      }
    • 测试类

      public class HashMapDemo {
      public static void main(String[] args) {
      //创建HashMap集合对象
      HashMap<Student, String> hm = new HashMap<Student, String>(); //创建学生对象
      Student s1 = new Student("林青霞", 30);
      Student s2 = new Student("张曼玉", 35);
      Student s3 = new Student("王祖贤", 33);
      Student s4 = new Student("王祖贤", 33); //把学生添加到集合
      hm.put(s1, "西安");
      hm.put(s2, "武汉");
      hm.put(s3, "郑州");
      hm.put(s4, "北京"); //遍历集合
      Set<Student> keySet = hm.keySet();
      for (Student key : keySet) {
      String value = hm.get(key);
      System.out.println(key.getName() + "," + key.getAge() + "," + value);
      }
      }
      }

1.6.3集合嵌套之ArrayList嵌套HashMap

  • 案例需求

    • 创建一个ArrayList集合,存储三个元素,每一个元素都是HashMap
    • 每一个HashMap的键和值都是String,并遍历。
  • 代码实现

    public class ArrayListIncludeHashMapDemo {
    public static void main(String[] args) {
    //创建ArrayList集合
    ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>(); //创建HashMap集合,并添加键值对元素
    HashMap<String, String> hm1 = new HashMap<String, String>();
    hm1.put("孙策", "大乔");
    hm1.put("周瑜", "小乔");
    //把HashMap作为元素添加到ArrayList集合
    array.add(hm1); HashMap<String, String> hm2 = new HashMap<String, String>();
    hm2.put("郭靖", "黄蓉");
    hm2.put("杨过", "小龙女");
    //把HashMap作为元素添加到ArrayList集合
    array.add(hm2); HashMap<String, String> hm3 = new HashMap<String, String>();
    hm3.put("令狐冲", "任盈盈");
    hm3.put("林平之", "岳灵珊");
    //把HashMap作为元素添加到ArrayList集合
    array.add(hm3); //遍历ArrayList集合
    for (HashMap<String, String> hm : array) {
    Set<String> keySet = hm.keySet();
    for (String key : keySet) {
    String value = hm.get(key);
    System.out.println(key + "," + value);
    }
    }
    }
    }

1.6.4集合嵌套之HashMap嵌套ArrayList

  • 案例需求

    • 创建一个HashMap集合,存储三个键值对元素,每一个键值对元素的键是String,值是ArrayList
    • 每一个ArrayList的元素是String,并遍历。
  • 代码实现

    public class HashMapIncludeArrayListDemo {
    public static void main(String[] args) {
    //创建HashMap集合
    HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>(); //创建ArrayList集合,并添加元素
    ArrayList<String> sgyy = new ArrayList<String>();
    sgyy.add("诸葛亮");
    sgyy.add("赵云");
    //把ArrayList作为元素添加到HashMap集合
    hm.put("三国演义",sgyy); ArrayList<String> xyj = new ArrayList<String>();
    xyj.add("唐僧");
    xyj.add("孙悟空");
    //把ArrayList作为元素添加到HashMap集合
    hm.put("西游记",xyj); ArrayList<String> shz = new ArrayList<String>();
    shz.add("武松");
    shz.add("鲁智深");
    //把ArrayList作为元素添加到HashMap集合
    hm.put("水浒传",shz); //遍历HashMap集合
    Set<String> keySet = hm.keySet();
    for(String key : keySet) {
    System.out.println(key);
    ArrayList<String> value = hm.get(key);
    for(String s : value) {
    System.out.println("\t" + s);
    }
    }
    }
    }

1.6.5统计字符串中每个字符出现的次数

  • 案例需求

    • 键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。
    • 举例:键盘录入“aababcabcdabcde” 在控制台输出:“a(5)b(4)c(3)d(2)e(1)”
  • 代码实现

    public class HashMapDemo {
    public static void main(String[] args) {
    //键盘录入一个字符串
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个字符串:");
    String line = sc.nextLine(); //创建HashMap集合,键是Character,值是Integer
    // HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
    TreeMap<Character, Integer> hm = new TreeMap<Character, Integer>(); //遍历字符串,得到每一个字符
    for (int i = 0; i < line.length(); i++) {
    char key = line.charAt(i); //拿得到的每一个字符作为键到HashMap集合中去找对应的值,看其返回值
    Integer value = hm.get(key); if (value == null) {
    //如果返回值是null:说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储
    hm.put(key,1);
    } else {
    //如果返回值不是null:说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值
    value++;
    hm.put(key,value);
    }
    } //遍历HashMap集合,得到键和值,按照要求进行拼接
    StringBuilder sb = new StringBuilder(); Set<Character> keySet = hm.keySet();
    for(Character key : keySet) {
    Integer value = hm.get(key);
    sb.append(key).append("(").append(value).append(")");
    } String result = sb.toString(); //输出结果
    System.out.println(result);
    }
    }

Java(28)集合三Map的更多相关文章

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

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

  2. java基础集合简介Map(三)下

    --Map接口简介 今天来看一看map集合,map映射接口,用于存放键值对,<key,value>,通过key来查找value,顾名思义key不能为空,唯一且不重复,不然底层怎么查呢! 可 ...

  3. Java:集合,Map接口框架图

    Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...

  4. Java之集合(七)Map

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7327216.html 1.前言 按照顺序,本章本是要对Set的相关类进行介绍及讲解的.但是对于其实现有所了解的都 ...

  5. Java之集合(三)ArrayList

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7291339.html 1.前言 本章介绍List中最常用的一个类--ArrayList.在第一章中已经介绍了Li ...

  6. Java面试集合(三)

    前言 大家好,给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类? 答:可以含有多个类,但只有一个是public类,public类的类名与文件名必须一致. 2 ...

  7. Java面试集合(三)-30道面试题

    前言 大家好,我是 Vic,今天给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类?答:可以含有多个类,但只有一个是public类,public类的类名与文件 ...

  8. Java笔记(二十三)……Map集合

    Map接口 Map<K,V> 该集合存储的是键值对,成对往集合里存,而且要保证键的唯一性 常用方法 添加 Vput(K key, V value) voidputAll(Map<? ...

  9. Java集合之Map和Set

    以前就知道Set和Map是java中的两种集合,Set代表集合元素无序.不可重复的集合:Map是代表一种由多个key-value对组成的集合.然后两个集合分别有增删改查的方法.然后就迷迷糊糊地用着.突 ...

随机推荐

  1. EternalBlue永恒之蓝渗透测试

    Eternal Blue(永恒之蓝)-ms17-010渗透测试 第一次做的渗透测试,也是第一次去写博客,还望各位师傅多多指正 :) 工具 1.靶机系统 window7 开放445以及139端口 2.k ...

  2. 云效x钉钉:让研发工作更简单

    云效x钉钉:让研发工作更简单,奔走相告,云效&钉钉集成实现组织架构.成员同步以及消息通知啦! 我们知道云效致力于智能化.安全可追溯.高效.简单.灵活,「云效新一代企业级DevOps平台」阿里云 ...

  3. 区间DP的瞎扯淡

    写在前面连个引言都不加就直接开1. 区间DP状态常见模板: f[i][j]常常表示第i个到第j个这个区间内达到题目要求,所需要的最小值(最大值) 如: 1. [石子合并](https://www.lu ...

  4. Junit5快速入门指南-3

    Fixtures 是测试中非常重要的一部分.他们的主要目的是建立一个固定/已知的环境状态以确保 测试可重复并且按照预期的方式运行.比如在app测试中 基类@BeforeClass 配置初始化,初始化d ...

  5. Spring Boot中使用@Async实现异步调用,加速任务的执行!

    什么是"异步调用"?"异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行 ...

  6. 可选链运算符、空值合并运算符 --应用到vue项目

    1.npm安装 npm install @babel/plugin-proposal-optional-chaining // 可选链运算符 ?. npm install @babel/plugin- ...

  7. FastAPI(7)- get 请求 - 详解 Path

    前言 上一篇讲了可以为查询参数添加额外的校验和元数据,Query 库:https://www.cnblogs.com/poloyy/p/15306809.html 这篇讲可以为路径查询添加额外的校验和 ...

  8. 关于AS下Gradle安装问题总结

    在之前安装AS的随笔中简单描述了解决方法,但不够详细,在第二次创建项目时又遇到了gradle安装错误,通过在网上查找解决方法,发现方法比较多样,且描述不够仔细,本随笔将详细记录我在gradle安装中的 ...

  9. iNeuLink硬件网关与iNeuOS工业互联网操作系统互联互通应用案例

    目       录 1.      应用概述... 2 2.      模拟硬件设备配置... 2 3.      iNeuLink硬件网关配置... 4 3.1           硬件介绍... ...

  10. java中避免集合死链调用

    目录 1. 前言 2. 场景 3. 环境 3.1 开发环境准备 3.2 数据准备 3.2.1 Mysql数据库表及数据 3.2.2 redis库数据 4. 解决方式 5.完整代码 5.1Model 5 ...