学生选课--使用Map添加学生
hashMap的映射是无序的,和set一样
package lmr; public class MapTest{ public map<String,Student>students; public MapTest(){ this.students = new HashMap<String,student>(); } public void testPut(){ Scanner console = new Scanner(System.in); int i = 0; while(i<3){ System.out.println("请输入学生ID"); String ID = console.next(); Student st = students.get(ID); if(st == null){ System.out.println("请输入学生姓名"); String name = console.next(); Student newStudent = new Student(ID,name); students.put(ID,newStudent); System.out.println("成功添加学生:"+students.get(ID).name); i++; } else{ System.out.println("该学生ID已被占用"); continue; } } } public void testKeySet(){ Set<String> keyset = students.keyset(); System.out.println("总共有:"+students.size()+"个学生"); for (String stuId;keyset){ Student st = students.get(stuId); if(st!=null) System.out.println("学生:"+st.name); } } public static void main(String[] args){ MapTest mt = new MapTest(); mt.testPut(); mt.testKeySet(); } }
通过KeySet方法,遍历Map中的所有”键“的Set集合
注意:由于HashMap的映射是无序的,所以打印的顺序和插入的顺序是不一样的。
通过put方法往Map中添加元素。
注意:在put之前需要先get获取所添加的Key是否已被占用。
student.get(ID)是采用Map的get()方法检测是否存在值为ID的学生,如果没有,则返回null.
keySet()方法,返回所有键的Set集合。
取得Map的容量可用size()方法。
keyset()返回Map中所有的key以集合的形式可用Set集合接收,HashMap当中的映射是无序的。
import java.util.Map; public class MapTest{ //用来承装学生类型对象 public Map<String,Student> students; //构造器中初始化students; public MapTest(){ this .students= new HashMap<String,Student>();} /**测试添加:输入学生ID,判断是否被占用 若有被占用,则输入姓名,创建心学生对象,并且 添加到student中*/ public void tsetPut(){ //创建一个Scanner对象,用来获取输入的学生ID和姓名 Scanner console= new Scanner(System.in); int i= 0 ; while (i< 3 ){ System.out.println( "请输入学生ID" ); String ID=console.next(); //判断该ID是否被占用 Student st=student.get(ID); if (st== null ){ //提示输入学生姓名 System.out.println( "请输入学生姓名" ); String name=console.next(); //创建新的学生对象 Student newStudent= new Student(ID,name); //通过调用students的put方法,添加ID-学生映射 student.put(ID,newStudent); System.out.println( "成功添加学生:" +students.get(ID).name); i++; else { System.out.println( "该学生ID已被占用!" ); continue ;}}}} //测试Map的keySet方法 public void testKeySet(){ //通过keySet方法,返回Map中的所有“键”的Set集合 Set <String> keySet=students.keySet(); //取得students的容量 System.out.pritnln( "总共有:" +students.size()+ "个体学生" ); //遍历keySet,取得每一个键,再调用get()方法取得每个键对应的value for (String stuId:keySet){ Student st=students.get(stuId); if (st!= null ) System.out.println( "学生:" +st.name); } } public static void main(String args){ MapTest mt= new MapTest(); mt.testPut(); mt.testKeySet(); }} |
hashmap是无序的.
keySet()
//简约版2020 package com.kandy.imoockecheng.listmap; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class TestMap { Map<String,Student> students; public TestMap(){ this.students = new HashMap<>(); } public void testPut(){ Scanner input = new Scanner(System.in); System.out.println("开始录入学生信息:"); while (true){ System.out.print("请输入学生ID,输入0退 : "); String id = input.next(); //判断是否退出 if(id.equals("0")){ input.close(); break; } //判断是否存在学生的id Student st = students.get(id); if(st!=null) { System.out.println(">>已存在的ID,请重新输入!"); continue; } //提示输入学生的姓名 System.out.print("请输入学生的姓名:"); String name = input.next(); //创建学生对象 Student student = new Student(id,name); //添加的students 到map中 students.put(id,student); System.out.println("添加完成!可以继续添加."); } } //查看学生列表 public void showStudents(){ System.out.println(">>>>>>>学生列表<<<<<<<"); System.out.println("ID\t\t姓名"); students.forEach((k,student)->{ System.out.println(k+"\t\t"+student.name); }); } public static void main(String[] args) { TestMap tm = new TestMap(); tm.testPut(); tm.showStudents(); } }
// 判断该ID是否被占用
1.Student st = students.get(ID);//获取这个id下的value值 没有的话就为null
2.
student.get(ID)的返回值是个Student类型的对象,再通过对象调用属性name
Map中get(key)方法返回的是value值
Scanner用完最后程序加个对象.close();
Map的add、keySet方法
100%
List:类似数组,有从0开始int类型的标记,可存储任意对象,存储对象可重复 Set:可存储任意对象,存储对象不可重复 Map:存储的单位对象是一组键值对entry,其中key不可重复,value可以重复,key和value都可以是任意对象
public Map<String,student> students;
public MapTest(){
this.students=new HashMap<String,Student>();
}
输入ID,若ID被占用则提示输入新ID,没有则创建并添加
students.get(ID);//若ID存在则返回对应的value值
Student std=new Student(ID,name);
students.put(ID,std);//增加
students.get(ID).name
Set<String> keySet=students.keySet();//返回String类型(Map中所有键)的Set集合
for(String st:keySet){
Student std =student.get(st);
if(std!=null)
st.name}
students.size();
public class MapTest {
public Map<String,Student> student;
public MapTest() {
this.student=new HashMap<String,Student>();
}
public void testPut() {
Scanner input = new Scanner(System.in);
int i=0;
while(i<3) {
System.out.println("请输入学生的id:");
String str1 = input.next();
Student st = student.get(str1);
if(st==null) {
System.out.println("请输入学生姓名:");
String name = input.next();
Student stu = new Student(str1,name);
student.put(str1,stu);
i++;
}else {
System.out.println("该学生已经被录入");
continue;
}
}
}
public void testPrint() {
System.out.println("学生总人数为:"+student.size());
Set<String> keySet = student.keySet();
for(String stuid : keySet) {
Student stu = student.get(stuid);
if(stu.name!=null) {
System.out.println("学生为:"+student.get(stuid).name);
}}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MapTest demo = new MapTest();
demo.testPut();
demo.testPrint();
}
}
Map的使用:
测试添加:
遍历方法(KeySet):
打印结果无序!!
Map接口提供了分别返回key值集合、value值集合以及Entry(键值对)集合的方法 Map支持泛型,形式如:Map<K,V> HashMap类 HashMap是Map中的一个重要的实现类,也是最常用的,给予哈希表实现 HashMap中的Entry对象是无序排列的 Key值和Value值都可以为Null,但是一个HashMap只能有一个key值为Null的映射(key值不可重复) student.get(ID)是采用Map的get()方法,检测是否存在值为ID的学生,如果没有,则返回null. keySet()方法,返回所有键的Set集合。 取得Map的容量可用size()方法。 keyset()返回Map中所有的key以集合的形式可用Set集合接收,HashMap当中的映射是无序的。 students.get(ID)是采用Map的get()方法
List:类似数组,有从0开始int类型的标记,可存储任意对象,存储对象可重复
Set:可存储任意对象,存储对象不可重复
Map:存储的单位对象是一组键值对entry,其中key不可重复,value可以重复,key和value都可以是任意对象
Map中获取值的方法:1、keySet
先创建一个map类型的属性//用来承载学生类型的对象的
添加一个构造方法//给student属性初始化
添加一个方法
创建一个Scanner对象
创建一个循环//输入id
调用map的get方法,把键传递进去//存在返回value值,不存在则返回空
创建新的学生对象
调用students的put方法 ,添加id
通过keySet方法,返回Map中的所有 键的集合
遍历ketSet,取得每一个值,再调用get方法取得每个键对应的value
可以用size来表示容量
import java.util.Map;
public class MapTest{
//用来承装学生类型对象
public Map<String,Student> students;
//构造器中初始化students;
public MapTest(){
this.students=new HashMap<String,Student>();}
/**测试添加:输入学生ID,判断是否被占用
若有被占用,则输入姓名,创建心学生对象,并且
添加到student中*/
public void tsetPut(){
//创建一个Scanner对象,用来获取输入的学生ID和姓名
Scanner console=new Scanner(System.in);
int i=0;
while(i<3){
System.out.println("请输入学生ID");
String ID=console.next();
//判断该ID是否被占用
Student st=student.get(ID);
if(st==null){
//提示输入学生姓名
System.out.println("请输入学生姓名");
String name=console.next();
//创建新的学生对象
Student newStudent=new Student(ID,name);
//通过调用students的put方法,添加ID-学生映射
student.put(ID,newStudent);
System.out.println("成功添加学生:"+students.get(ID).name);
i++;
else{
System.out.println("该学生ID已被占用!");
continue;}}}}
//测试Map的keySet方法
public void testKeySet(){
//通过keySet方法,返回Map中的所有“键”的Set集合
Set <String> keySet=students.keySet();
//取得students的容量
System.out.pritnln("总共有:"+students.size()+"个体学生");
//遍历keySet,取得每一个键,再调用get()方法取得每个键对应的value
for(String stuId:keySet){
Student st=students.get(stuId);
if(st!=null)
System.out.println("学生:"+st.name);
}
}
public static void main(String args){
MapTest mt=new MapTest();
mt.testPut();
mt.testKeySet();
}}
map也是一个接口 他的实现类为HashMap map中的KEY不能重复 Key可以为null 但也只能只有一个
案例功能说明
import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.Set; public class MapTest { /** * 用来承装学生类型对象 */ public Map<String,Student> students; /** * 在构造器中初始化students属性 */ public MapTest(){ this.students = new HashMap<String, Student>(); } /** * 测试添加:输入学生Id,判断是否被占用 * 若未被占用,则输入姓名,创建新学生对象,并且添加到students中 */ public void testPut(){ //创建一个Scanner对象,用来获取输入的学生Id和姓名 Scanner console = new Scanner(System.in); int i = 0; while (i < 3){ System.out.println("请输入学生Id:"); String ID = console.next(); //判断该ID是否被占用 Student st = students.get(ID); if (st == null){ //提示输入学生姓名 System.out.println("请输入学生姓名:"); String name = console.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; } } } /** * 测试Map的keySet方法 */ public void testKeySet(){ //通过keySet方法,返回Map中的所有“键”的Set集合 Set<String> keySet = students.keySet(); //取得students的容量 System.out.println("总共有:" + keySet.size() + "个学生"); //遍历keySet,取得每一个键,再调用get方法取得每个键对应的value for (String stuId:keySet){ Student st = students.get(stuId); if (st != null) System.out.println("学生:" + st.name); } } public static void main(String[] args){ MapTest mt = new MapTest(); mt.testPut(); mt.testKeySet(); } }
map的映射是无序的
初始化 Map 属性,需要 HashMap()
get()方法是传入、取读 Map 一个“键”
KeySet()方法是返回出传入 Map 的“键”
Demo4/MapTest
当一个HashMap使用get方法时,传入的时一个key,返回的是一个在泛型中已经指定好的类型的对象,如果在HashMap里面不存在这个key的话,将返回一个null(可以理解为某个类型的引用没有指向一个特定类型的对象,为空)
continue;循环再次开始
nall 空
Set<String> keySet = students.keySet();