为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

2 回答

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();

}


}

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

0 回复 有任何疑惑可以回复我~

代码截图?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信