首页 > 代码库 > Java 之集合框架 中(10)

Java 之集合框架 中(10)

Map和HashMap

Map接口:
Map 提供了一种映射关系,其中的元素是以键值对(Key-Value)的形式
存储的,能够实现根据Key快速查找value
Map中的键值对以Evtry类型的对象实例形式存在
键值(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             // 取得从键盘输入的学生ID103             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 }

 

Java 之集合框架 中(10)