问答详情
源自:5-3 学生选课---删除 Map 中的学生

输出顺序始终是根据id大小来排序的

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次了

提问者:慕工程7468250 2017-07-20 16:26

个回答

  • 三道杆大队长
    2017-08-13 19:25:54

    只是凑巧,上面这个老哥已经说很清楚了

  • 丶痞子绅士
    2017-07-20 20:37:03

    凑巧而已,多试几次再看看,

    HashMap是无序的,TreeMap是有序的