JAVA中的集合框架(Map&HashMap)

转帖请注明本文出自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();//遍历所有的键和值
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值