为什么我添加的学生是按照添加顺序打印输出的,各位大神谁指导一下?谢谢啦
为什么我添加的学生是按照添加顺序打印输出的,各位大神谁指导一下?谢谢啦
为什么我添加的学生是按照添加顺序打印输出的,各位大神谁指导一下?谢谢啦
2015-09-09
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();
}
}
这是源代码,会不会太多了?谢谢啦
举报