HashSet 和HashMap集合的运用
- 通过全局变量的方式,进行集合的申明
//final 只是限制值不能被修改,类不能被继承,此处意义为: 不能修改STUDENT_DATA的地址
private static final Set<Map<String,Object>> STUDENT_DATA = new HashSet<Map<String,Object>>();
例如学生信息的统计,宠物商店存放的例子,都可以进行集合存放,十分方便
- 集合信息的放入
//输入学生信息
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 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);
}
}