首先定义了一个课程类,里边放一些有关课程的属性和方法
package Chen_collection;
/*
* 课程类
*/
public classCourse {
private String id;
private String name;
public void Set_id(String i){
id=i;
}
public void Set_name(String j){
name=j;
}
public String get_id(){
return id;
}
public String get_name(){
return name;
}
public Course(String i,String n){
id=i;
name=n;
}
public Course(){
}
}
然后定义了一个学生类,里边存放学生的一些属性和方法
package Chen_collection;
import java.util.Set;
import java.util.HashSet;
public class Student {
privateString id;
privateString name;
publicSet<Course> courses;
publicString get_id(){
returnid;
}
publicString get_name(){
returnname;
}
publicStudent(String i,String n){
id=i;
name=n;
courses=newHashSet<Course>();
}
}
然后下边就是同过Map接口实现对学生进行增、删、查、改
package Chen_collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
/*
* Map接口提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key
快速查找value。
Map中的键值对以Entry类型的对象实例形式存在。
键值对不可重复,value值可以(就比如说,一个人可以有多种职位,职位就是key而这些职位都指同一
个人,这个人就是value)
每个键最多只能映射到一个值(也就是这些键不能重复)
Map接口提供了分别返回key值集合、value值集合以及Entry(键值对)集合的方法
Map支持泛型,形式如:Map<K,V>(K代表key,V代表value)
HashMap是Map接口的一个非常重要的实现类,基于哈希表实现的
HashMap中的Entry对象是无序排列的
Key值和value值都可以为null,但是一个HashMap中只能有一个key值为null的映射(key值不可重复)
案例功能说明
通过Map<String,Student>进行学生信息管理,其中key为学生ID,value为学生对象
通过键盘输入学生信息
对集合中的学生信息进行增、删、查、改
*/
public classMapTest {
//用来承装学生类型对象
publicMap<String,Student>students;
/*
* 在构造器中初始化students属性
*/
public MapTest(){
students=newHashMap<String,Student>();
}
/*
* 测试添加:
* 添加学生ID,判断是否被占用,若未被占用,则输入姓名,创建新学生对象,并且添加到students中去
*/
public void Put(){
//创建一个Scanner对象,用来接收输入的学生的ID和姓名
Scannerconsole=new Scanner(System.in);
int i=0;
while(i<3){
System.out.println("请输入学生的ID");
StringID=console.next();
//判断这个ID是否已经被占用了
Studentst=students.get(ID);
if(st==null){
//提示输入学生姓名
System.out.println("请输入学生姓名:");
Stringname=console.next();
//创建新的学生对象
StudentnewStudent=new Student(ID,name);
//通过调用students的put方法,添加ID--学生映射
students.put(ID,newStudent);
System.out.println("成功添加学生:"+students.get(ID).get_name());
i++;
}else{
System.out.println("该学生的ID已经被占用");
continue;
}
}
}
/*
* 测试Map的keySet方法
*/
public void testKeySet(){
//通过keySet方法,返回Map中所有"键"的Set集合
Set<String>keySet=students.keySet();
//取得学生的容量
System.out.println("总共有"+students.size()+"个学生");
//遍历keySet,取得每一个键,再调用get方法取得每一个键的value
for(String stuID:keySet){
Studentst=students.get(stuID);
if(st!=null){
System.out.println("学生:"+st.get_name());
}
}
}
/*
* 测试删除Map中已有的映射
*/
public void testRemove(){
//获取从键盘输入的待删除的学生的ID字符串
Scannerconsole=new Scanner(System.in);
while(true){
//提示用户输入要删除的学生的ID
System.out.println("请输入要删除的学生的ID");
StringID=console.next();
//判断该ID是否有对应的学生类对象
Studentst=students.get(ID);
if(st==null){
System.out.println("输入的ID并不存在");
continue;
}
students.remove(ID);
System.out.println("成功删除学生:"+st.get_name());
break;
}
}
/*
* 通过entrySet方法来达到遍历Map的方法
*/
public void testEntrySet(){
//通过entrySet方法,返回Map中所有键值对的集合
Set<Entry<String,Student>>entrySet=students.entrySet();
for(Entry<String,Student>entry:entrySet){
System.out.println("取得键:"+entry.getKey());
System.out.println("对应的值为:"+entry.getValue().get_name());
}
}
/*
* 利用put方法修改Map中已有的映射
*/
public void testMobify(){
System.out.println("输入需要修改的学生的ID:");
Scannerconsole=new Scanner(System.in);
while(true){
StringstuID=console.next();
//从students中查找是否有该学生ID对应的映射
Studentstudent=students.get(stuID);
if(student==null){
System.out.println("该Id不存在,请重新输入");
continue;
}
System.out.println("当前Id所对应的学生为:"+student.get_name());
System.out.println("请输入新的学生的姓名:");
Stringname=console.next();
StudentnewStudent=new Student(stuID,name);
students.put(stuID, newStudent);//其实就是用新输入的ID将原来的ID覆盖了而已
System.out.println("修改成功");
break;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MapTestT=new MapTest();
T.Put();
T.testKeySet();
T.testRemove();
T.testEntrySet();
T.testMobify();
T.testEntrySet();
}
}