package com.demo.zhq; 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; private Scanner console; private Scanner b; private Scanner a; /** * 构造器中初始化students属性 */ public MapTest(){ this.students = new HashMap<String,Student>(); } /** * 测试添加:输入学生ID,判断是否被占用 * 若未被占用,则输入姓名,创建学生对象,并且添加到students中 * * @param args */ public void testPut(){ console = new Scanner(System.in); int i = 0; while(i < 3){ System.out.println("请输入学生ID:"); String ID = console.next(); //判断该ID是否被占用 Student st = students.get(ID); if (st == null) { //提示输入学生姓名 System.out.println("请输入学生姓名:"); String name = console.next(); //创建一个新的对象 Student newStudent = new Student(ID, name); //通过调用stdents的put方法,添加 ID-学生映射 students.put(ID, newStudent); System.out.println("成功添加学生:"+students.get(ID).name); i++; }else { System.out.println("该学生ID已被占用!"); continue; } } } /** * 测试Map的keySet方法 * @param args */ public void testKeySet(){ //通过keySet的方法,返回Map中的所有"键"的Set集合 Set<String> keySet = students.keySet(); // //取得students的容量 // 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的删除映射 * @param args */ public void testRemove() { b = new Scanner(System.in); while (true) { //提示输入删除学生的ID System.out.println("请输入要删除的学生ID:"); String ID = b.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 * * @param args */ public void testEntrySet(){ //通过entrySet方法,返回Map中的所有键值对 Set<Entry<String,Student>> entrySet = students.entrySet(); System.out.println("删除后还剩"+entrySet.size()+"名学生,分别是:"); for (Entry<String, Student> entry : entrySet) { System.out.print("键值:"+entry.getKey()+","); System.out.println("姓名:"+entry.getValue().name); } } /** * 利用put方法修改Map中的已有映射 * @param args */ public void testModify(){ //提示输入要修改的学生ID System.out.println("请输入要修改的学生ID:"); a = new Scanner(System.in); while (true) { //取得从键盘输入的学生ID String stuID = a.next(); //从students中查找该学生ID对应的学生对象 Student student = students.get(stuID); } } public static void main(String[] args) { // TODO Auto-generated method stub MapTest mt = new MapTest(); mt.testPut(); mt.testKeySet(); mt.testRemove(); mt.testEntrySet(); } }
为什么我的输出顺序是根据输入的id来的啊,每次都是一样的1,2,3的顺序,N次了
只是凑巧,上面这个老哥已经说很清楚了
凑巧而已,多试几次再看看,
HashMap是无序的,TreeMap是有序的