java集合实现简单的学生增删改查
package collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
import javax.swing.text.html.parser.Entity;
public class MapTest {
/**
* 创建一个map类型的属性,用来承载学生类型对象
* @param args
*/
//键值k的类型属性
public Map<String, Student> students;
/**
* 在构造方法中初始化students的属性
* @param args
*/
public MapTest() {
this.students =new HashMap<String,Student>();
}
/**
*测试添加:输入学生ID,判断是否被占用
*若未被占用,这输入姓名,创建新的学生对象
*并且添加到students中
*
*/
public void testPut() {
Scanner sc = new Scanner(System.in);
//创建一个Scanner对象,用来获取输入的学生ID
int i =0;
while(i<3) {
System.out.println("请输入学生ID:");
String ID = sc.next();
//判断ID是否被占用
//创建一个学生对象,穿进去的ID是键,如果存在,返回对应的value值
Student st = students.get(ID);
if(st==null) {
//提示输入学生姓名
System.out.println("请输入学生姓名");
String name =sc.next();
//创建一个学生对象
Student st2 = new Student(ID, name);
//调用students的put方法,添加ID-学生映射
students.put(ID, st2);
System.out.println("成功添加学生"+students.get(ID).name);
i++;
}else {
System.out.println("该学生ID已占用");
//让循环继续
continue;
}
}
}
/**
* 测试Map的KeySet方法
*/
public void testKeySet() {
//通过KeySet方法,返回Map中所有“键”的Set集合 因为通过泛型规定了键的类型所以加了个String
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() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("请输入要删除学生的ID");
String ID = sc.next();
//判断该ID是否有学生对象
Student st = students.get(ID);
if(st==null) {
System.out.println("未找到该学生对象");
continue;
}else {
students.remove(ID);
System.out.println("成功删除学生"+st.name);
break;
}
}
}
/**
* 通过EntrySet方法来遍历Map
*/
public void testEntrySet() {
//EntrySet方法,返回Map中所有的键值对
Set<Entry<String, Student>> Entryset =students.entrySet();
//遍历Entryset对象
for (Entry<String, Student> entry : Entryset) {
System.out.println("取得的键值:"+entry.getKey());
System.out.println("对应的值为:"+entry.getValue().name);//此处的getvalue对应的是规定泛型中的Student一样的
}
}
/**
* 利用put方法修改Map中的已有映射
*
*/
public void testModify() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("请输入要修改的学生ID");
String ID = sc.next();
//判断该ID是否有学生对象
Student st = students.get(ID);
if(ID==null) {
System.out.println("该学生不存在,请重新输入");
continue;
}else {
//提示当前对应的学生对象的姓名
System.out.println("此学生为:"+st.name);
//提示输入新的学生姓名,修改映射
System.out.println("请输入新的姓名:");
String name = sc.next();
Student newstudent = new Student(ID, name);
//利用put方法进行修改
students.put(ID, newstudent);
System.out.println("修改成功");
break;
}
}
}
public static void main(String[] args) {
MapTest m = new MapTest();
m.testPut();
m.testKeySet();
m.testRemove();
m.testEntrySet();
m.testModify();
m.testEntrySet();
}
}
结果运行如下:
注:本文仅以Map为例,其他可参考本人的其他博客https://blog.csdn.net/pillow233/article/details/99427538