作者:季沐测试笔记

原文地址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. MySQL-SQL基础

    mysql> use test; Database changed mysql> create table emp(ename varchar(10),hirdate date,sal d ...

  2. python 逆序按行读取文件

    How to read a file in reverse order? import os def readlines_reverse(filename): with open(filename) ...

  3. 代码保留格式(高亮)复制到Word(转载)

    将代码保持高亮复制粘贴到word上,一些方法如下: 方法一:借助网站http://www.planetb.ca/syntax-highlight-word/(代码有编号,整体排版精美令人舒适,但语言有 ...

  4. RTSP H264/HEVC 流 Wasm 播放

    本文将介绍 RTSP H264/HEVC 裸流如何于网页前端播放.涉及 WebSocket 代理发送流数据, Wasm 前端解码等. 代码: https://github.com/ikuokuo/rt ...

  5. 20210824 Prime,Sequence,Omeed

    考场 T1 貌似是 luogu 上原题 T2 计数,想起了这题和这题,但没有 \(n^2\) 一档的分...准备打个表 T3 期望 DP,但暴力是 \(O(qn)\) 的,发现 \(combo\) 的 ...

  6. noip模拟18

    \(\color{white}{\mathbb{曲径通幽,星汉隐约,缥缈灯影,朦胧缺月,名之以:薄雾}}\) 放眼望去前十被我弃掉的 \(t2\) 基本都上85了-- 开考就以为 \(t2\) 是个大 ...

  7. ysoserial CommonsColletions3分析(2)

    上篇文章讲到CC3的TransformedMap链,这篇我们就来讲一下LazyMap链. 其实LazyMap链还是使用的TemplatesImpl承载payload,InstantiateTransf ...

  8. Linux系列(10) - 命令搜索命令whereis与which

    whereis 只能搜索系统命令,不能搜索自己凭空创建的普通文件 命令格式: whereis [命令名] 选项: -b:只查找可执行文件 -m:只查找帮助文件 which 搜索命令所在路径及别名:不是 ...

  9. ubuntu中如何切换普通用户、root用户

    1.打开Ubuntu,输入命令:su root,回车提示输入密码,输入密码后提示:认证失败. 2.给root用户设置密码: 命令:sudo passwd root 输入密码,并确认密码. 3.重新输入 ...

  10. javascript / PHP [Design Patterns - Facade Pattern]

    This pattern involves a single class which provides simplified methods required by client and delega ...