package onlinejudge;
import java.util.*;
import java.util.Map.Entry;
/*
* Map提供一种映射关系,其中的元素是以键值对的形式存储,能够实现根据key快速查找value
* Map中的键值对是以Entry类型的对象实例形式存在
* 键(key)不可重复,value可以重复
* 每个键最多可以映射到一个value值
* 支持泛型
*/
/*
* HashMap基于哈希表
* Hash Map中的Entry对象是无序排列的
* key值和value值都可以是null,但是一个HashMap只能有一个key值为null的映射
*/
class Student{
String id;
String name;
/*
* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof Student))
return false;
Student other = (Student) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
Set courses;// Set is interface
Student(String id, String name){
this.id = id;
this.name = name;
this.courses = new HashSet();
//HashSet is Set's class
}
}
class MapTest{
Map<String ,Student> students;
MapTest(){
this.students = new HashMap<String , Student>();
}
void testPut() {
Scanner cin = new Scanner(System.in);
int i = 0;
while(i<3) {
System.out.println("请输入学生Id");
String ID = cin.next();
//判断ID是否被占用
Student st = students.get(ID);
if(st==null) {
//提示输入学生姓名
System.out.println("请输入学生姓名");
String name = cin.next();
//创建新的学生对象
Student newStudent = new Student(ID,name);
//通过调用students的put方法,添加ID-学生映射
students.put(ID,newStudent);
System.out.println("成功添加学生:" + students.get(ID).name);
i++;
}
else {
System.out.println("该学生ID已被占用");
continue;
}
}
}
void testKeySet() {//测试Map的KeySet方法
//通过keyset方法,返回Map中的所有键的Set集合
Set<String> keySet = students.keySet();
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);
}
}
void testRemove() {
//提示用户待删除学生ID
System.out.println("请输入要删除的学生ID");
Scanner cin = new Scanner(System.in);
while(true) {
//提示用户待删除学生ID
System.out.println("请输入要删除的学生ID");
String ID = cin.next();
//判断ID是否有对应的学生对象
Student st = students.get(ID);
if(st==null) {
System.out.println("输入ID不存在");
continue;
}
students.remove(ID);
System.out.println("成功删除学生:" + st.name);
break;
}
}
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().name);
}
}
void testModify() {//测试修改
System.out.println("请输入要修改的学生ID");
Scanner cin = new Scanner(System.in);
while(true) {
//取得从键盘输入的学生ID
String stuID = cin.next();
//查找是否有相应的映射
Student student = students.get(stuID);
if(student == null) {
System.out.println("该ID不存在 ,请重新输入");
continue;
}
System.out.println("当前该学生ID ,所对应的学生为:" + student.name);
System.out.println("请输入新的学生姓名");
String name = cin.next();
Student newStudent = new Student(stuID , name);
students.put(stuID,newStudent);
System.out.println("修改成功");
break;
}
}
void testContainsKey() {
Scanner cin = new Scanner(System.in);
System.out.println("请输入学生ID");
String id = cin.next();
System.out.println("您输入的学生ID是:" + id + "该学生的ID是否存在:"+students.containsKey(id));
}
/*
*
* containsValue的方法需要调用equals方法和hashcode方法比较
*/
void testContainsValue() {
Scanner cin = new Scanner(System.in);
System.out.println("请输入要查询的学生姓名");
String name = cin.next();
System.out.println("该学生的姓名是否存在:" + students.containsValue(new Student(null,name)));
}
}
public class Main {
public static void main(String []args) {
MapTest mt = new MapTest();
mt.testPut();
//mt.testKeySet();
//mt.testRemove();
// mt.testEntrySet();
//mt.testModify();
//mt.testEntrySet();
mt.testContainsKey();
mt.testContainsValue();
}
}
Map
最新推荐文章于 2024-07-10 14:32:02 发布