Map&HashMap
Map提供映射关系,元素以键值对形式存储,Map的键值对一Entry类型的对象实例形式存在,key值不能重复,value可以
键最多能映射到一个值,支持泛型 Map<K,V>
HashMap是Map的一个重要实现类,基于哈希表实现,其中的Entry对象是无序排列的,key和value值都可以为null,但只能有一个key值为null的映射(key值不可以重复)

public class MapTest {
/**
* 承装学生类型对象
*/
public Map<String, Student> students;
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();
//判断ID是否被占用
Student st=students.get(ID);
if(st==null){
System.out.println("请输入学生姓名:");
String name=console.next();
Student news=new Student(ID, name);
//调用students的put方法,添加ID-学生映射
students.put(ID,news);
System.out.println("成功添加学生:"+students.get(ID).name);
i++;
}
else{
System.out.println("该学生ID已被占用");
continue;
}
}
} /**
* 测试Map的keySet方法
* @param args
*/
public void testKeySet(){
//已经规定泛型为String类型
Set<String> ks=students.keySet();
//取得students的容量
System.out.println("总共有:"+students.size()+"个学生");
//遍历KeySet,取得每一个键,再调用个体方法取得每个键对应的value
for(String stuId:ks){
Student st=students.get(stuId);
if(st!=null)
System.out.println("学生:"+st.name);
}
} /**
* 测试删除Map中的映射
* @param args
*/
public void testRemove(){
//获取从键盘输入的待删除学生ID字符串
Scanner console=new Scanner(System.in);
while(true){
System.out.println("输入要删除的学生ID");
String stuID=console.next();
//判断是否有对应的学生对象
Student st=students.get(stuID);
if(st==null){
//提示输入的ID并不存在
System.out.println("该ID不存在");
continue;
}
students.remove(stuID);
System.out.println("成功删除学生"+st.name);
break;
}
}
/**
* 通过entrySet方法来遍历Map
*/
public void testEntrySet(){
//entrySet方法返回Map的所有键值对
//Set<Entry> es=students.entrySet();
Set<Entry<String,Student>> es=students.entrySet();
for(Entry<String,Student> entry:es){
System.out.println("取得键为:"+entry.getKey());
System.out.println("值为为:"+entry.getValue().name);
}
}
/**
* put方法修改Map中 已有的映射
* @param args
*/
public void testModify(){
System.out.println("请输入要修改的学生的ID:");
Scanner console=new Scanner(System.in);
while(true){
String stuID=console.next();
//判断是否有对应的学生对象
Student st=students.get(stuID);
if(st==null){
//提示输入的ID并不存在
System.out.println("该ID不存在");
continue;
}
else{
System.out.println("当前学生ID对应:"+st.name);
System.out.println("请输入新的学生姓名 :");
String name=console.next();
Student ns=new Student(stuID, name);
students.put(stuID, st);
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();
} }

mooc_java 集合框架中 学生所选课程2Map&HashMap的更多相关文章

  1. mooc_java 集合框架上 学生所选课程

    用一个集合Set存放学生所选课程接口不能实例化,所以用其实现类进行实例化 set接口不能实例化,通过HashSet这个实现类来进行实例化,需要导入包this.courses=new HashSet() ...

  2. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  3. 第49节:Java集合框架中底层文档的List与Set

    Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...

  4. Java集合框架中的快速失败(fail—fast)机制

      fail-fast机制,即快速失败机制,是java集合框架中的一种错误检测机制.多线程下用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除),则会抛出Concurre ...

  5. Java集合框架中底层文档的List与Set

    Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...

  6. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  7. Java集合框架中List接口的简单使用

    Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放 ...

  8. Java集合框架中的元素

    之前有一篇笔记,讲的是集合和泛型,这几天看Java集合中几个接口的文档,思绪非常混乱,直到看到Oracle的“The Collections Framwork”的页面,条理才清晰些,现在进行整理. 一 ...

  9. Java中的函数式编程(五)Java集合框架中的高阶函数

    写在前面 随着Java 8引入了函数式接口和lambda表达式,Java 8中的集合框架(Java Collections Framework, JCF)也增加相应的接口以适应函数式编程.   本文的 ...

随机推荐

  1. C#面试:抽象类与接口

    本人近日面试遇到此等问题.然后又一次补习了一下下.希望对同行们有所帮助. 一.抽象类:       抽象类是特殊的类,仅仅是不能被实例化:除此以外.具有类的其它特性:重要的是抽象类能够包括抽象方法,这 ...

  2. 2016年蓝桥杯C/C++B组

    第一次參加蓝桥杯.也是有非常多感触的,时间全然不够写最后一题... 最后一题没做...还有全排序非常重要... 1. 煤球数目 有一堆煤球,堆成三角棱锥形.详细: 第一层放1个, 第二层3个(排列成三 ...

  3. shell程序

    例一:helloworld #!/bin/sh -x message="hello" read name echo "$message ,$name" 例二:选 ...

  4. project修改时间日历

    视图→甘特图 格式→时间表→右键时间表  详细的日程表,然后双击时间即可

  5. dynamic_cast<const ObjectList&>(msg);

    说简单的就是C里面的强制类型转换,只不过C++里面为了类型安全而这么做的.主要用于 基类与继承类之间. C写多了,类型一般都强转,特别是指针.int * a;void * b = (void*)a;c ...

  6. [转载]UDP丢包率提升

    UDP丢包及无序问题 转载自:http://hi.baidu.com/gamedot/item/96cb9bf1a717eb14d6ff8cd5 最近在做一个项目,在这之前,做了个验证程序. 发现客户 ...

  7. mybatis的两种分页方式:RowBounds和PageHelper

    原理:拦截器. 使用方法: RowBounds:在mapper.java中的方法中传入RowBounds对象. RowBounds rowBounds = new RowBounds(offset, ...

  8. Google论文BigTable拜读

    这周少打点dota2,争取把这篇论文读懂并呈现出来,和大家一起分享. 先把论文搞懂,然后再看下和论文搭界的知识,比如hbase,Chubby和Paxos算法. Bigtable: A Distribu ...

  9. 记录下关于ejabberd及XMPP的官网链接

    ejabberd中文翻译 ——http://wiki.jabbercn.org/Ejabberd2:安装和操作指南 XMPP中文翻译: http://wiki.jabbercn.org/XEP-012 ...

  10. c# 根据读取的配置信息删除某个目录及下所有文件

    #region 定时删除目录文件 /// <summary> /// 定时删除目录文件 /// northeasttycoon /// </summary> /// <p ...