Set接口和Map接口的运用

HashSet 和HashMap集合的运用

  1. 通过全局变量的方式,进行集合的申明
//final 只是限制值不能被修改,类不能被继承,此处意义为: 不能修改STUDENT_DATA的地址
	private static final Set<Map<String,Object>> STUDENT_DATA = new HashSet<Map<String,Object>>();
	

例如学生信息的统计,宠物商店存放的例子,都可以进行集合存放,十分方便

  1. 集合信息的放入
	//输入学生信息
	 private static void create(Scanner scanner) {
	        Map<String, Object> data = null;
	        String key = "Y";
	        while (!"N".equalsIgnoreCase(key)) {
	            data = new HashMap<String, Object>(3);
	            out.print("\n请输入学生编号:");
	            data.put("sno", scanner.next());
	            out.print("\n请输入学生姓名:");
	            data.put("name", scanner.next());
	            out.print("\n请输入学生年龄:");
	            data.put("age", scanner.nextShort());

	            //将Map类型的 集合data 赋值给学生集合STUDENT_DATA
	            STUDENT_DATA.add(data);

	            out.print("\n是否继续输入学生信息? Y/N  ");
	            key = scanner.next();
	            data = null;
	        }
	        entrance(scanner);
	    }

  1. 如何修改集合中的信息
//修改学习信息
	 private static void update(Scanner scanner) {
	        listTable();
	        
	        out.print("\n\n请输入要修改的学生编号: ");
	        String key = scanner.next();
	        while(!"q".equalsIgnoreCase(key)) {
	        Map<String,Object> data = null ;
//	    增强for循环,将Set学生集合STUDENT_DATA  通过Map集合 map 打印出来
	        for(Map<String,Object> map : STUDENT_DATA) {
//	        	在map集合中找出 key为 "sno"的 values值  ,因为申明的是object类型,所有此处进行强制转换(String)
//	        	在通过equals(key)找出关键字
	        	if(((String)map.get("sno")).equals(key)) {
	        		data = map ;
	        		}
	        	}
	        if(data == null) {
	        	out.print("\n\n您输入的学生编号不存在,请重新输入要修改的学生编号(返回主菜单输入Q):");
	        	}else {
	        		out.print("\n请输入学生姓名:");
	        		data.put("name", scanner.next());
	        		out.print("\n请输入学生年龄:");
	                data.put("age", scanner.nextShort());

	                out.print("\n\n数据修改成功,输入学生编号继续修改(返回主菜单输入Q):");
	        	}
	        	key = scanner.next();
	        }	
	        entrance(scanner);
	 }

学生信息系统代码示例

package com.wenhe.studentchaxun;

import static java.lang.System.out;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class FuzhiDemo {
	//final 只是限制值不能被修改,类不能被继承,此处意义为: 不能修改STUDENT_DATA的地址
	private static final Set<Map<String,Object>> STUDENT_DATA = new HashSet<Map<String,Object>>();
	
	
	public static void main(String[] args) {
		entrance(new Scanner(System.in));    //括号内为直接赋值不写变量名
	}
	
	//主界面
	public static void entrance(Scanner scanner) {
		out.println("**************************************");
        out.println("**  1、录入学生信息                 **");
        out.println("**  2、修改学生信息                 **");
        out.println("**  3、删除学生信息                 **");
        out.println("**  4、查询学生信息                 **");
        out.println("**************************************");
        out.print("\n\n\n 请选择菜单(退出请按Q键):");
		String key = scanner.next();
		while(!"Q".equalsIgnoreCase(key)){
			int idxMenu = 0;
            try {
                idxMenu = Integer.parseInt(key);
                if (idxMenu < 1 || idxMenu > 4) {
                    out.print("您输入的菜单选项有误,请检查重新输入(退出请按Q键):");
                    key = scanner.next();
                    continue;
                }
            } catch (NumberFormatException e) {    //捕获数字转换异常
                out.print("您输入的菜单选项有误,请检查重新输入(退出请按Q键):");
                key = scanner.next();
                continue;
            }	
            
            switch(idxMenu) {
            case 1:
                create(scanner);
                break;
            case 2:
                update(scanner);
                break;
            case 3:
                remove(scanner);
                break;
            case 4:
                retrive(scanner);
                break;
            default:
                break;
            }
            out.print("\n\n\n 请选择菜单(退出请按Q键):");
            key = scanner.next();        
		}
		System.exit(0);
	}
	
	//输入学生信息
	 private static void create(Scanner scanner) {
	        Map<String, Object> data = null;
	        String key = "Y";
	        while (!"N".equalsIgnoreCase(key)) {
	            data = new HashMap<String, Object>(3);
	            out.print("\n请输入学生编号:");
	            data.put("sno", scanner.next());
	            out.print("\n请输入学生姓名:");
	            data.put("name", scanner.next());
	            out.print("\n请输入学生年龄:");
	            data.put("age", scanner.nextShort());

	            //将Map类型的 集合data 赋值给学生集合STUDENT_DATA
	            STUDENT_DATA.add(data);

	            out.print("\n是否继续输入学生信息? Y/N  ");
	            key = scanner.next();
	            data = null;
	        }
	        entrance(scanner);
	    }
	
	 private static void drawHR() {
	        out.println("----------------------------------");
	    }
	
	 private static void drawTableHeader() {
	        drawHR();
	        out.println("|  编号  |    姓名    |    年龄  |");
	        drawHR();
	    }
	 private static void drawTableBody(Map<String, Object> data) {
	        if (null == data) {
	            out.println("|  查无数据                      |");
	        } else {
	            out.printf("|%8s|%12s|%10s|\n", data.get("sno"), data.get("name"), data.get("age"));
	        }
	    }
	
	 private static void listTable() {
	        drawTableHeader();
	        for (Map<String, Object> map : STUDENT_DATA) {
	            drawTableBody(map);
	        }
	        drawHR();
	 }
	
	 //修改学习信息
	 private static void update(Scanner scanner) {
	        listTable();
	        
	        out.print("\n\n请输入要修改的学生编号: ");
	        String key = scanner.next();
	        while(!"q".equalsIgnoreCase(key)) {
	        Map<String,Object> data = null ;
//	    增强for循环,将Set学生集合STUDENT_DATA  通过Map集合 map 打印出来
	        for(Map<String,Object> map : STUDENT_DATA) {
//	        	在map集合中找出 key为 "sno"的 values值  ,因为申明的是object类型,所有此处进行强制转换(String)
//	        	在通过equals(key)找出关键字
	        	if(((String)map.get("sno")).equals(key)) {
	        		data = map ;
	        		}
	        	}
	        if(data == null) {
	        	out.print("\n\n您输入的学生编号不存在,请重新输入要修改的学生编号(返回主菜单输入Q):");
	        	}else {
	        		out.print("\n请输入学生姓名:");
	        		data.put("name", scanner.next());
	        		out.print("\n请输入学生年龄:");
	                data.put("age", scanner.nextShort());

	                out.print("\n\n数据修改成功,输入学生编号继续修改(返回主菜单输入Q):");
	        	}
	        	key = scanner.next();
	        }	
	        entrance(scanner);
	 }
	
	//删除学生编号
	    private static void remove(Scanner scanner) {
	        listTable();
	        out.print("\n\n请输入要删除的学生编号:");
	        String key = scanner.next();
	        while (!"Q".equalsIgnoreCase(key)) {
	            Map<String, Object> data = null;
	            for (Map<String, Object> map : STUDENT_DATA) {
	                if (((String) map.get("sno")).equals(key)) {
	                    data = map;
	                    break;
	                }
	            }
	            if(data == null) {
	            	out.print("\n\n您输入的学生编号不存在,请重新输入要删除的学生编号(返回主菜单输入Q):");
	            	}else {
	            		STUDENT_DATA.remove(data);
	            		out.print("\n\n数据删除成功,输入学生编号继续删除(返回主菜单输入Q):");
	            	}
	            key = scanner.next();
	            }
	        	entrance(scanner);
	    }
	
	    //查询
	    private static void retrive(Scanner scanner) {
	        listTable();
	        out.print("\n\n请输入学号查询:");
	        String key = scanner.next();
	        while(!"q".equalsIgnoreCase(key)){
	        	Map<String,Object> data = null;
	        	for(Map<String,Object> map : STUDENT_DATA) {
	        		if(((String)map.get("sno")).equals(key)) {
	        			data = map ;
	        			break;
	        		}
	        	}
	        	drawTableHeader();
	            drawTableBody(data);
	            drawHR();
	            
	            out.print("\n\n请输入学号查询(输入Q返回主菜单):");
	            key = scanner.next();
	        }
	        entrance(scanner);
	    }
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值