问答详情
源自:5-2 学生选课---使用 Map 添加学生

为什么我添加的学生是按照添加顺序打印输出的,各位大神谁指导一下?谢谢啦

为什么我添加的学生是按照添加顺序打印输出的,各位大神谁指导一下?谢谢啦

提问者:爱如夏花秋叶 2015-09-09 14:40

个回答

  • 爱如夏花秋叶
    2015-09-10 11:34:36

    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 {


    /**

    * 用来承装学生类型的对象

    * @param args

    */

    public Map<String,Student> students;

    /**

    * 定义构造方法,并在构造方法中对studens进行初始化

    * @param args

    */

    public MapTest(){

    this.students=new HashMap<String,Student>();

    }

    /**

    * 测试添加:输入学生ID,判断是否被占用

    * 若未被占用,则输入姓名,创建学生对象,并且添加到students中;

    * @param args

    */

    public void testPut(){

    Scanner scan=new Scanner(System.in);

    int i=0;

    while(i<3){

    // 从键盘上输入ID

    System.out.println("请输入学生ID:");

    String ID=scan.next();

    // 判断输入的ID是否已被占用

    Student st=students.get(ID);

    if(st==null){

    System.out.println("请输入学生姓名:");

    String name=scan.next();

    // 创建新的学生对象

    Student newStu=new Student(ID,name);

    // ID-学生映射(调用Map(students)的put方法)

    students.put(ID, newStu);

    System.out.println("成功添加学生"+students.get(ID).getName());

    // System.out.println("成功添加学生"+newStu.getId()+" "+newStu.getName());

    i++;

    }else{

    System.out.println("该学生ID已被占用");

    continue;

    }

    }

    }

    /**

    * 测试Map的keySet方法

    * @param args

    */

    public void testKeySet(){

    // 通过KeySet方法,返回Map(students)的所有键(Key)的Set集合

    Set<String> KeySet=students.keySet();

    // 取得KeySet的长度 

    System.out.println("总共有"+students.size()+"个学生");

    // 循环遍历KeySet中的Key值,得到每一个Key值对应的value

    for(String stuId:KeySet){

    if(stuId!=null){

    // 需定义一个Student类型的对象接收stuId对应的value值

    Student st=students.get(stuId);

    System.out.println("学生:"+stuId+" "+st.getName());

    }

    }

    }

    /**

    * 测试删除Map中已有的映射

    * @param args

    */

    public void testRemove(){

    // 提示将要删除的学生的ID

    System.out.println("请输入要删除的学生的ID:");

    // 获取从键盘上输入的学生的ID

    Scanner scan =new Scanner(System.in);

    String ID=scan.next();

    // 判断该ID是否对应一个学生(即value值)

    Student st=students.get(ID);

    while(true){

    if(st==null){

    // 提示输入的学生ID不存在

    System.out.println("输入的学生ID不存在");

    continue;

    }

    students.remove(ID);

    System.out.println("成功删除学生:"+st.getName());

    break;

    }

    }

    /**

    * 通过entrySet方法遍历Map

    * @param args

    */

    public void testEntrySet(){

    // 通过entrySet方法,返回Map中的所有键值对

    Set<Entry<String,Student>> entrySet=students.entrySet();

    for(Entry<String,Student> entry:entrySet){

    System.out.println("取得键为:"+entry.getKey());

    // 得到的值的类型和Entery中value(Student)的类型一样,可用getName()方法获得姓名

    System.out.println("对应的值为:"+entry.getValue().getName());

    }

    }

    /**

    * 利用put方法修改Map中已有映射

    * @param args

    */

    public void testModify(){

    // 提示要修改的学生的ID

    System.out.println("请输入要修改的学生ID");

    // 创建一个Scanner对象,用来接收从键盘上输入的学生的ID

    Scanner scan = new Scanner(System.in);

    // 判断stuID对应的学生对象是否存在

    while(true){

    String stuID = scan.next();

    Student stu=students.get(stuID);

    if(stu==null){

    System.out.println("该学生ID不存在,请重新输入:");

    continue;

    }

    // 提示当前要修改的学生对象的姓名

    System.out.println("学生ID为"+stuID+"对应的学生姓名为:"+students.get(stuID).getName()+",该学生信息即将被修改");

    // 提示输入新的学生姓名

    System.out.println("请输入新的学生姓名:");

    String newName = scan.next();

    Student newStudent = new Student(stuID,newName);

    students.put(stuID, newStudent);

    System.out.println("修改成功!");

    break;

    }

    }

    public static void main(String[] args) {

    // TODO Auto-generated method stub


    MapTest mp=new MapTest();

    mp.testPut();

    mp.testKeySet();

    // mp.testRemove();

    // mp.testEntrySet();

    mp.testModify();

    mp.testEntrySet();

    }


    }

    这是源代码,会不会太多了?谢谢啦

  • 伊兮尘昔
    2015-09-10 10:09:43

    代码截图?