zoukankan      html  css  js  c++  java
  • Java 之集合框架 中(10)

    Map和HashMap

    Map接口:
    Map 提供了一种映射关系,其中的元素是以键值对(Key-Value)的形式
    存储的,能够实现根据Key快速查找value
    Map中的键值对以Entry类型的对象实例形式存在
    键值(Key) 不可重复,value值可以重复
    每个键最多只能映射到一个值
    Map接口提供了返回key值集合,value集合以及Entry(键值对)集合的方法
    Map支持泛型,形式如:Map<K,V>

    HashMap类
    HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现
    HashMap中的entry对象是无序排列的
    key值和value值都是可以为unll的,但是一个HashMap只能有一个
    key值为null的映射(key值不可以重复)

    案列功能说明

    通过Map<String,Student>进行学生信息管理
    其中key值为学生的ID,value为学生的对象

      通过键盘输入学生信息

      对集合中的学生信息进行增,删,改,查操作

      1 import java.util.HashMap;
      2 import java.util.Map;
      3 import java.util.Map.Entry;
      4 import java.util.Scanner;
      5 import java.util.Set;
      6 
      7 public class MapTest {
      8 
      9     // 用来承装学生类型对象  // 这里的Student为上次写的Student类 (参考Java之集合框架上(9))
     10     public Map<String, Student> students;
     11     // 在构造器中初始化students属性
     12     public MapTest(){
     13         this.students = new HashMap<String, Student>();
     14     }
     15     
     16     /*
     17      * 测试添加:输入学生ID,判断是否被占用
     18      * 若未被占用,则输入姓名,创建学生对象,并且
     19      * 添加到students中
     20      */
     21     public void testPut(){
     22         // 创建一个Scanner对象,用来获取输入的学生ID和姓名
     23         Scanner console = new Scanner(System.in);
     24         int i = 0;
     25         while (i < 3){
     26             System.out.println("请输入学生ID:");
     27             String ID = console.next();
     28             // 判断ID是否被占用
     29             Student st = students.get(ID);
     30             if (st == null){
     31                 // 提示输入学生姓名
     32                 System.out.println("请输入学生姓名:");
     33                 String name = console.next();
     34                 // 创建新的学生对象
     35                 Student newStudent = new Student(ID,name);
     36                 // 通过调用students的put方法,添加ID-学生映射
     37                 students.put(ID, newStudent);
     38                 System.out.println("成功添加学生:" + students.get(ID).name);
     39                 i ++;
     40             }
     41             else{
     42                 System.out.println("该学生ID已被占用!");
     43                 continue;
     44             }
     45         }
     46     }
     47     
     48     // 测试Map的KeySet方法
     49     public void testKeySet(){
     50         // 通过KeySet方法,返回Map中的所有“键”的Set集合
     51         Set<String> KeySet = students.keySet();
     52         // 取得students的容量
     53         System.out.println("总共有:" + students.size() + "个学生!");
     54         // 遍历KeySet,取得每一个键,在调用get方法取得每一个键对应的value值
     55         for (String stuId: KeySet){
     56             Student st = students.get(stuId) ;
     57             if (st != null){
     58                 System.out.println("学生:" + st.name);
     59             }
     60         }
     61     }
     62     
     63     // 测试删除Map中已有的映射
     64     public void testRemove(){
     65         // 获取从键盘输入的待删除学生ID字符串
     66         Scanner console = new Scanner(System.in);
     67         while(true){
     68             // 提示输入待删除的学生的ID
     69             System.out.println("请输入要删除的学生ID!");
     70             String ID = console.next();
     71             // 判断ID是否有对应的学生对象
     72             Student st = students.get(ID);
     73             if (st == null){
     74                 // 提示输入的ID并不存在
     75                 System.out.println("该ID不存在!");
     76                 continue;
     77             }
     78             students.remove(ID);
     79             System.out.println("成功删除学生:" + st.name);
     80             break;
     81         }
     82     }
     83     
     84     // 通过entrySet方法来遍历Map
     85     public void testEntrySet(){
     86         // 通过entrySet方法,返回Map中的所有键值对
     87         Set<Entry <String,Student>> entrySet = students.entrySet();
     88         for (Entry<String, Student> entry:entrySet){
     89             System.out.println("取得键:" + entry.getKey());
     90             System.out.println("对应的值:" + entry.getValue().name);
     91             
     92         }
     93     }
     94     
     95     // 利用put方法修改Map中已有映射
     96     public void testModify(){
     97         // 提示输入要修改的学生ID
     98         System.out.println("请输入要修改的学生ID:");
     99         // 创建一个Scanner对象,去获取从键盘上输入的学生ID字符串
    100         Scanner console = new Scanner(System.in);
    101         while (true ){
    102             // 取得从键盘输入的学生ID
    103             String stuID = console.next();
    104             // 从students中查找该学生ID对应学生对象
    105             Student student = students.get(stuID);
    106             if (student == null){
    107                 System.out.println("该ID不存在!请从新输入!");
    108                 continue;
    109             }
    110             // 提示当前对应学生对象的姓名
    111             System.out.println("当前学生ID,所对应的学生为:" + student.name);
    112             // 提示输入新的学生姓名,来修改已有映射
    113             System.out.println("请输入新的学生姓名:");
    114             String name = console.next();
    115             Student newStudent = new Student(stuID,name);
    116             students.put(stuID, newStudent);
    117             System.out.println("修改成功!");
    118             break;
    119         }
    120     }
    121     
    122     public static void main(String[] args) {
    123 
    124         MapTest mt = new MapTest();
    125         mt.testPut();
    126         mt.testKeySet();
    127         mt.testRemove();
    128         mt.testEntrySet();
    129         mt.testModify();
    130         mt.testEntrySet();
    131     }
    132 
    133 }
  • 相关阅读:
    python发送邮件
    常用的排序算法
    关于前端ajax请求url为何添加一个随机数
    RabbitMQ消息队列
    shell编程基本语法和变量
    第70课 展望:未来的学习之路(完结)
    第69课 技巧:自定义内存管理
    第68课 拾遗:让人迷惑的写法
    第67课 经典问题解析五
    第66课 C++中的类型识别
  • 原文地址:https://www.cnblogs.com/yoke/p/6986049.html
Copyright © 2011-2022 走看看