作者:季沐测试笔记

原文地址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. Confluence7.4安装并破解汉化教程

    Confluence是一款由JAVA编写用于企业知识库管理协同软件,多用于构建企业内部WIKI,支持多人协作,共享信息等. 当前系统环境Centos7.9,内存至少2G以上,数据库采用MySQL5.7 ...

  2. TCP连接中的状态

    1. 正常状态转换 我们用图 3-13 来显示在正常的 TCP 连接的建立与终止过程中,客户与服务器所经历的不同状态.读者可以对照图 3-12 来阅读,使用图 3-12 的状态图来跟踪图 3-13 的 ...

  3. 前缀和的n个神奇操作

    前情回顾 前缀和的基础用法戳这里->传送门 众所周知,简单的前缀和解决的一般都是静态查询的问题,例如区间和.区间积等 操作的时候也很简单,就是根据需要来维护一个数组,每次查询的时候就用到tr[r ...

  4. Linux基础命令(基于CentOS7)

    1.帮助相关命令 man 查看普通命令的帮助 --help 只能查看内置命令 info 查看一个命令的更多信息 type 查看是否为内置命令 2.关机重启 shutdown -h 关机 -r 重启 - ...

  5. FastAPI(1)- 简单介绍

    前言 为啥要学它呢,因为学 Flask 的时候发现有人更推荐它代替 Flask,看了下介绍,感觉很强,而且也能拿来做平台,当然学起来!卷起来! 为什么要使用 FastAPI ? 日渐没落的是后端 HT ...

  6. linux 性能统计命令

    命令1 性能压力测试,yes持续输出30s到设备中空文件,然后杀掉进程 { yes> /dev/null & } && sleep 30 && ps -e ...

  7. Intel® QAT加速卡之同步异步模式

    QAT 的两种操作模式 Intel QAT API同时支持同步和异步两种操作模式. 为了获得最佳性能,该应用程序应能够向加速引擎提交多个未完成的请求. 提交多个未完成的请求可最大程度地减少加速引擎上的 ...

  8. 【第二十篇】-Maven IntelliJ之Spring Cloud直播商城 b2b2c电子商务技术总结

    Maven IntelliJ IntelliJ IDEA 已经内建了对 Maven 的支持.我们在此例中使用的是 IntelliJ IDEA 社区版 11.1. IntelliJ IDEA 的一些特性 ...

  9. 离散化模板题 I ——重复元素离散化后的数字相同

    离散化模板题 I --重复元素离散化后的数字相同 题目描述 现有数列A1, A2, ⋯, An,数列中可能有重复元素. 现在要求输出该数列的离散化数列,重复元素离散化后的数字相同.  输入 第一行,一 ...

  10. POJ3061——Subsequence(尺取法)

    Subsequence POJ - 3061 给定长度为n的数列整数a0,a1,a2-an-1以及整数S.求出总和不小于S的连续子序列的长度的最小值,如果解不存在输出0. 反复推进区间的开头和末尾,来 ...