1摊欠、Map&HashMap簡介
Map接口:
1捌显、Map提供了一種映射管系吠式,其中的元誒是以鍵值對(key-value)的形式存儲(chǔ)的陡厘,能夠?qū)崿F(xiàn)根據(jù)key快速查找value
2、Map中的鍵值對以Entry類型的對象實(shí)例形式存在
3奇徒、鍵(key)不可重復(fù)雏亚,value值可以
4、每個(gè)鍵值最多只能映射到一個(gè)值
5摩钙、Map支持泛型罢低,形式如:Map<k,v>
HashMap類:
1、HashMap是Map的一個(gè)重要實(shí)現(xiàn)類胖笛,也是最常用的网持,基于哈希表實(shí)現(xiàn)
2、HashMap中的Entry對象是無序排列的
3长踊、key值和value值都可以為null功舀,但是一個(gè)HashMap只能有一個(gè)key值為null的映射(key值不可重復(fù))
2、學(xué)生選課-使用Map添加學(xué)生
功能說明:
通過Map<String,Student>進(jìn)行學(xué)生信息管理身弊,其中key為學(xué)生的ID辟汰,value為學(xué)生對象
通過鍵盤輸入學(xué)生信息
對集合中的學(xué)生信息進(jìn)行增、刪阱佛、改帖汞、查操作
package com.imooc.student;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class MapTest {
/**
* 用來承裝學(xué)生類型對象
* @param args
*/
public Map<String,Student> students;
/**
* 在構(gòu)造器中初始化students屬性
* @param args
*/
public MapTest(){
this.students=new HashMap<String,Student>();
}
/**
* 測試添加:輸入學(xué)生ID,判斷是否被占用
* 若被占用凑术,則輸入姓名翩蘸,創(chuàng)建新學(xué)生對象,并且
* 添加到student中
* @param args
*/
public void testPut(){
//創(chuàng)建一個(gè)Scanner對象淮逊,用來獲取輸入的學(xué)生ID和姓名
Scanner console=new Scanner(System.in);
int i=0;
while(i<3){
System.out.println("請輸入學(xué)生ID:");
String ID=console.next();
//判斷該ID還否被占用
Student st=students.get(ID);
if(st==null){
//提示輸入學(xué)生姓名
System.out.println("請輸入學(xué)生姓名:");
String name=console.next();
//創(chuàng)建新的學(xué)生對象
Student newStudent=new Student(ID,name);
//通過調(diào)用students的put方法催首,添加ID-學(xué)生映射
students.put(ID,newStudent);
System.out.println("成功添加學(xué)生:"+students.get(ID).name);
i++;
}else{
System.out.println("該學(xué)生ID已被占用");
continue;
}
}
}
/**
* 測試Map的keySet方法
* @param args
*/
public void testKeySet(){
//通過keySet方法 ,返回Map中的所有鍵的Set集合
Set<String> keySet=students.keySet();
//取得students的容量
System.out.println("總共有:"+students.size()+"個(gè)學(xué)生泄鹏!");
//遍歷keySet,取的每個(gè)鍵郎任,在調(diào)用get方法取得每個(gè)鍵對應(yīng)的value
for(String stuId:keySet){
Student st=students.get(stuId);
if(st!=null){
System.out.println("學(xué)生:"+st.name);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MapTest mt=new MapTest();
mt.testPut();mt.testKeySet();
}
}
3、學(xué)生選課-刪除Map中的學(xué)生
/**
* 測試刪除Map中的映射
* @param args
*/
public void testRemove(){
//獲取從鍵盤輸入的待刪除的學(xué)生的ID字符串
Scanner console=new Scanner(System.in);
while(true){
//提示輸入待刪除的學(xué)生ID字符串
System.out.println("請輸入要?jiǎng)h除的學(xué)生ID!");
String ID=console.next();
//判斷該ID是否有對應(yīng)的學(xué)生對象
Student st=students.get(ID);
if(st==null){
//提示輸入的ID并不存在
System.out.println("該ID不存在备籽!");
continue;
}
students.remove(ID);
System.out.println("成功刪除學(xué)生"+st.name);
break;
}
}
/**
* 通過entrySet方法來遍歷Map
*/
public void testEntrySet(){
//通過entrySet方法舶治,返回Map中所有鍵值對
Set<java.util.Map.Entry<String, Student>> entrySet=students.entrySet();
for(java.util.Map.Entry<String, Student> entry:entrySet){
System.out.println("取得鍵:"+entry.getKey());
System.out.println("對應(yīng)的值為:"+entry.getValue().name);
}
}
4、學(xué)生選課-修改Map中的學(xué)生
/**
* 利用put 方法修改Map中的已有映射
* @param args
*/
public void testModify(){
//獲取從鍵盤輸入的待修改的學(xué)生的ID字符串
Scanner console=new Scanner(System.in);
while(true){
//提示輸入待修改的學(xué)生ID字符串
System.out.println("請輸入要修改的學(xué)生ID!");
String stuID=console.next();
//判斷該ID是否有對應(yīng)的學(xué)生對象
Student student=students.get(stuID);
if(student==null){
//提示輸入的ID并不存在
System.out.println("該ID不存在!請重新輸入歼疮!");
continue;
}
//提示當(dāng)前對應(yīng)的學(xué)生對象的姓名
System.out.println("當(dāng)前該學(xué)生ID所對應(yīng)的學(xué)生為:"+student.name);
//提示輸入新的學(xué)生姓名杂抽,來修改已有的映射
System.out.println("請輸入新的學(xué)生姓名:");
String name=console.next();
students.remove(stuID);
Student newStudent=new Student(stuID,name);
students.put(stuID,newStudent);
System.out.println("修改成功!");
break;
}
}