• Java—集合框架Map


    • Map接口

      Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,key和value可以是任意类型的对象,能够实现根据key快速查找value。

      Map中的键值对以Entry类型的对象实例形式存在。

      键(key值)不可重复,value值可以。

      每个键最多只能映射到一个值,一个值可以对应多个键。

      Map接口提供了分别返回key值集合、value值集合以及Entry(键值对)集合的方法。Entry类是Map的一个内部类。

      Map支持泛型,形式如:Map<Key值类型,V值类型>

    • HashMap类

      HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现。

      HashMap中的Entry对象是无序排列的。

      Key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射

      MapTest.java

    package com.test.collection;
    
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Scanner;
    import java.util.Set;
    
    public class MapTest {
        public Map<String, Student> students;
        
        public MapTest() {
            this.students = new HashMap<String, Student>();
        }
        
        /**
         * 添加
         */
        public void testPut(){
            Scanner console = new Scanner(System.in);
            for (int i = 0; i < 3; i++) {
                System.out.println("输入学生ID:");
                String studentId = console.next();
                //判断该ID是否被占用
                Student st = students.get(studentId);
                if (st == null) {
                    //提示输入学生姓名
                    System.out.println("输入学生姓名:");
                    String studentName = console.next();
                    //创建学生对象
                    Student newStudent = new Student(studentId, studentName);
                    //通过调用students的put方法,添加ID-学生映射
                    students.put(studentId, newStudent);
                    System.out.println("成功添加学生:" + students.get(studentId).name);
                } else {
                    System.out.println("该学生ID被占用");
                    continue;
                }
            }
        }
        /**
         * 通过keySet方法遍历Map
         */
        public void testKeySet() {
            //通过keySet方法,返回Map中所有“键”的Set集合
            Set<String> keySet = students.keySet();
            //获得students的容量
            System.out.println("总共有" + students.size() + "个学生");
            //遍历keySet,取得每一个键,再调用get方法取得每一个键对应的value
            for (String stuId : keySet) {
                Student st = students.get(stuId);
                if (st != null) {
                    System.out.println("学生:" + st.name);
                }
            } 
        }
        /**
         * 删除
         */
        public void testRemove() {
            Scanner console = new Scanner(System.in);
            while (true) {
                System.out.println("请输入要删除学生的ID:");
                String studentId = console.next();
                Student st = students.get(studentId);
                if (st == null) {
                    System.out.println("该学生ID不存在");
                    continue;
                }
                students.remove(studentId);
                System.out.println("成功删除学生:" + st.name);
                break;
            }
        }
        /**
         * 通过entrySet方法遍历Map
         */
        public void testEntrySet() {
            Set<Entry<String, Student>> entrySet = students.entrySet();
            System.out.println("总共有" + students.size() + "个学生");
            for (Entry<String, Student> entry : entrySet) {
                System.out.println("key值为:" + entry.getKey());
                System.out.println("对应的value为:" + entry.getValue().name);
            }
        }
        /**
         * 修改
         */
        public void testModify() {
            System.out.println("请输入要修改的学生ID");
            Scanner console = new Scanner(System.in);
            while (true) {
                String studentId = console.next();
                Student st = students.get(studentId);
                if (st == null) {
                    System.out.println("该学生ID不存在");
                    continue;
                }
                System.out.println("当前学生ID,所对应的学生为" + st.name);
                System.out.println("请输入新的学生的姓名:");
                String studentName = console.next();
                students.put(studentId, new Student(studentId, studentName));
                System.out.println("修改成功");
                break;
            }
        }
    
        public static void main(String[] args) {
            MapTest mt = new MapTest();
            mt.testPut();
            mt.testKeySet();
            mt.testRemove();
            mt.testEntrySet();
            mt.testModify();
            mt.testEntrySet();
        }
    }

      执行结果:

    输入学生ID:
    1
    输入学生姓名:
    Tom
    成功添加学生:Tom
    输入学生ID:
    2
    输入学生姓名:
    Jack
    成功添加学生:Jack
    输入学生ID:
    3
    输入学生姓名:
    Lucy
    成功添加学生:Lucy
    总共有3个学生
    学生:Tom
    学生:Jack
    学生:Lucy
    请输入要删除学生的ID:
    12
    该学生ID不存在
    请输入要删除学生的ID:
    3
    成功删除学生:Lucy
    总共有2个学生 key值为:
    1 对应的value为:Tom key值为:2 对应的value为:Jack

     请输入要修改的学生ID
     2
     当前学生ID,所对应的学生为Jack
     请输入新的学生的姓名:
     Lisa
     修改成功
     总共有2个学生
     key值为:1
     对应的value为:Tom
     key值为:2
     对应的value为:Lisa

     

  • 相关阅读:
    axios、ajax、fetch三者的区别
    React与Vue的相同与不同点
    react-redux
    redux【react】
    react高阶组件
    基于WebGL无插件虚拟场景漫游关键技术(完整版)ThingJS
    基于WebGL的三维交通监控可视化技术应用(实践版) ThingJS
    地下管线监控系统中互联网WebGL三维可视化构建技术 ThingJS
    基于WebGL实现智慧校园的全景漫游技术研究 三维可视化
    基于WebGL的3D可视化告警系统关键技术解析 ThingJS
  • 原文地址:https://www.cnblogs.com/tianxintian22/p/6691014.html
Copyright © 2020-2023  润新知