
- Map和HashMap
Map接口
1.Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value
2.Map中的键值对以Entry类型的对象实例形式存在
3.键(key值)不可重复,value可以
4.每个键最多只能映射到一个值
5.Map接口提供了分别返回key值集合,value值集合以及Entry(键值对)集合的方法
6.Map支持泛型,形式如:Map<K,V>
HashMap类
1.HashMap是Map 的一个重要实现类,也是最常用的,基于哈希表实现
2.HashMap中的Entry对象是无序排列的
3.key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射(key值不可重复)
- 学生选课——使用Map添加学生
- 学生选课——删除Map中的学生
- 学生选课——修改Map中的学生
package com.imooc.collection; import java.util.HashMap; 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; /*在构造器中初始化students属性*/ public MapTest(){ this.students=new HashMap<String,Student>(); } /** * 测试添加:输入学生ID,判断是否被占用 * 若薇被占用,则输入姓名,创建新学生对象,并且 * 添加到student中 */ public void testPut(){ Scanner console=new Scanner(System.in); int i=0; while (i<3) { System.out.println("请输入学生ID"); String ID=console.next(); Student st=students.get(ID); if (st==null) { //提示输入学生姓名 System.out.println("请输入学生姓名"); String name=console.next(); //添加新的学生对象 Student newStudent=new Student(ID,name); students.put(ID,newStudent); System.out.println("成功添加学生:"+students.get(ID).name); i++; }else{ System.out.println("该学生ID已被占用"); continue; } } } /** * @param args测试Map的keySet方法 */ public void testKeySet(){ //keySet方法,返回Map中的所有“键”的Set集合 Set<String> keySet=students.keySet(); //取得student的容量 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); } } } /** * 测试删除Map中的映射 */ public void testRemove(){ //获取从键盘输入待删除学生ID字符串 Scanner console=new Scanner(System.in); while (true) { //提示输入待删除的学生ID System.out.println("请输入要删除的学生ID"); String ID=console.next(); //判断该ID是否有对应的学生对象 Student st=students.get(ID); if (st==null) { //提示输入的ID并不存在 System.out.println("该ID不存在"); continue; } students.remove(ID); System.out.println("成功删除学生"+st.name); break; } } /** * 通过entrySet方法来遍历Map */ public void testEntrySet(){ //通过entrySet方法,返回Map中的所有键值对 Set<Entry<String,Student>> entrySet=students.entrySet(); for (Entry<String, Student> entry : entrySet) { System.out.println("取得键"+entry.getKey()); System.out.println("对应的职为:"+entry.getValue().name); } } /** * 利用put方法修改Map中的已有映射 */ public void testModify(){ //提示输入要修改的学生ID System.out.println("请输入要修改的学生ID:"); //创建Scanner对象,去获取从键盘上输入的学生ID字符串 Scanner console=new Scanner(System.in); while(true){ //取得从键盘上输入的学生ID String stuID=console.next(); //从students中查找该学生ID对应的学生对象 Student student=students.get(stuID); if (student==null) { System.out.println("该ID不存在,重新输入!"); continue; } //提示当前对应的学生对象的姓名 System.out.println("当前该学生ID,所对应的学生为:"+student.name); //提示输入新的学生姓名,来修改已有的映射 System.out.println("请输入新的学生姓名"); String name=console.next(); Student newStudent=new Student(stuID,name); students.put(stuID,newStudent); System.out.println("修改成功!"); break; } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MapTest mt=new MapTest(); mt.testPut(); mt.testKeySet(); /*mt.testRemove(); mt.testEntrySet();*/ mt.testModify(); mt.testEntrySet(); } }