原CSDN博客已弃用,文章会逐渐迁移过来。

转帖请注明本文出自weimeig的博客(http://blog.csdn.net/weimeig/article/details/79575842),请尊重他人的辛勤劳动成果,谢谢

应朋友们反馈的JAVA基础薄弱的问题,决定出一套完整的JAVA基础教程,帮助大家复习,巩固JAVA基础,今天要讲的是JAVA中的Map&HashMap集合。

import java.util.HashSet;  
import java.util.Set;  

/** 
 * 学生类 
 * @author Administrator 
 * 
 */  
public class Student {  
    private String id;  
    private String name;  
    private Set<Course> course;  
    Student(String id,String name){  
        this.id = id;  
        this.name = name;  
        this.course = new HashSet<Course>();    
    }  
    public String getId() {  
        return id;  
    }  
    public void setId(String id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public Set getCourse() {  
        return course;  
    }  
    public void setCourse(Set course) {  
        this.course = course;  
    }  
    public Student get(String stuId) {  
        // TODO Auto-generated method stub  
        return null;  
    }  
}  

import java.util.HashMap;  
import java.util.Map;  
import java.util.Map.Entry;  
import java.util.Scanner;  
import java.util.Set;  


public class MapTest {  
    /** 
     * 用来承装学生类型对象 
     */  
    public Map<String,Student> students;  

    /** 
     * 在构造器中初始化student属性 
     */  
    public MapTest(){  
        this.students = new HashMap<String, Student>();  

    }  
    /** 
     * 测试添加:输入学生ID.判断时候被占用 
     * 若未被占用,则输入姓名,创建新学生对象,并且 
     * 添加到students中 
     * @param args 
     */  
    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();  
            //提示输入学生姓名  
            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).getName());  
                i++;  
            }else{  
                System.out.println("该学生ID已被占用!");  
            }  
        }  
    }  
    /** 
     * 测试Map的KeySet方法 
     * @param args 
     */  
    public void testKeySet(){  
        //通过KeySet方法,返回Map中的所有"键"的Set集合  
        Set<String> KeySet = students.keySet();  
        //遍历KeySet,取得每一个键,再调用get方法取得每个键对于的value  
        //取得student的容量  
        System.out.println("总共有" + students.size() + "个学生");  
        for(String stuId:KeySet){  
            Student st = students.get(stuId);  
            if(st!=null){  
                System.out.println("学生" + st.getName());  
            }  
        }  
    }  
    /** 
     * 测试删除Map中的映射 
     * @param args 
     */  
    public void testRemove(){  
        //获取从键盘输入的待删除学生ID字符串  
        Scanner console = new Scanner(System.in);  
        while (true) {  
            //提示输入待删除的学生的ID  
            System.out.println("请输入要删除的学生ID");  
            String ID =console.next();  
            //判断该ID是否有对应的学生对象  
            Student st = students.get(ID);  
            if(st == null){  
                //提示输入的ID并不存在  
                System.out.println("该ID不存在");  
                continue;  
            }  
            students.remove(ID);  
            System.out.println("成功删除学生:" + st.getName());  
            break;  
        }  
    }  
    /** 
     * 通过entrySet方法来遍历Map 
     * @param args 
     */  
    public void testEntrySet(){  
        //通过enterSet方法,返回Map中所有键值对的集合,KeySet只是返回所有键的集合,EntrySet是返回所有键值对的集合  
//      Set<Entry> entrySet = student.entrySet();//会报错,因为entrySet返回的是entry的集合,而entry本身是带有和定义Map类型的泛型一样的泛型  
        Set<Entry<String,Student>> entrySet = students.entrySet();//所以要为他定义和当时定义的Map类型一样的数据类型  
        for(Entry<String,Student> entry:entrySet){  
            System.out.println("取得键:" + entry.getKey());  
            System.out.println("对应的值为:" + entry.getValue().getName());  
        }  
    }  
    /** 
     * 利用put方法修改Map中的已有映射 
     * @param args 
     */  
    public void testModify(){  
        //提示输入要修改的学生ID  
        System.out.println("请输入要修改的学生ID:");  
        //创建一个Scanner对象,去获取从键盘上输入的学生ID字符串  
        Scanner console = new Scanner(System.in);  
        while (true) {  
            //取得从键盘输入的学生ID  
            String stuId = console.next();  
            //从student中查找该学生ID对应的学生对象  
            Student student = students.get(stuId);  
            if(student == null){  
                System.out.println("该ID不存在!请重新输入!");  
                continue;  
            }  
            //提示当前对应的学生对象的姓名  
            System.out.println("当前该学生ID,所对应的学生为" + student.getName());  
            //提示输入新的学生姓名,来修改已有的映射  
            System.out.println("请输入新的学生姓名:");  
            String name = console.next();  
            Student newStudent = new Student(stuId, name);  
            students.put(stuId, newStudent);  
            System.out.println("修改成功!");  
            break;  
        }  
    }  
    public static void main(String[] args){  
        MapTest mt =new MapTest();  
        mt.testPut();//增加  
        mt.testKeySet();//遍历所有的键  
//      mt.testRemove();//删除  
//      mt.testEntrySet();//遍历所有的键和值  
        mt.testModify();//修改  
        mt.testEntrySet();//遍历所有的键和值  
    }  
}