mooc_java 集合框架中 学生所选课程2Map&HashMap
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的更多相关文章
- mooc_java 集合框架上 学生所选课程
用一个集合Set存放学生所选课程接口不能实例化,所以用其实现类进行实例化 set接口不能实例化,通过HashSet这个实现类来进行实例化,需要导入包this.courses=new HashSet() ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 第49节:Java集合框架中底层文档的List与Set
Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...
- Java集合框架中的快速失败(fail—fast)机制
fail-fast机制,即快速失败机制,是java集合框架中的一种错误检测机制.多线程下用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除),则会抛出Concurre ...
- Java集合框架中底层文档的List与Set
Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- Java集合框架中List接口的简单使用
Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放 ...
- Java集合框架中的元素
之前有一篇笔记,讲的是集合和泛型,这几天看Java集合中几个接口的文档,思绪非常混乱,直到看到Oracle的“The Collections Framwork”的页面,条理才清晰些,现在进行整理. 一 ...
- Java中的函数式编程(五)Java集合框架中的高阶函数
写在前面 随着Java 8引入了函数式接口和lambda表达式,Java 8中的集合框架(Java Collections Framework, JCF)也增加相应的接口以适应函数式编程. 本文的 ...
随机推荐
- @Cacheable注解在spring3中的使用-实现缓存
转: http://blog.csdn.net/chenleixing/article/details/44815443 在软件开发中使用缓存已经有一个非常久的历史了.缓存是一种很好的设计思想,一旦 ...
- 微信小程序 - 对象转换成对象数组
后端传过来的一个个对象 {1,2,3,4},{1,3,5,},{1,3,5} 我们应该转化为数组对象 [{},{},{},{}] ,最后通过wx:for遍历到页面 示例图:
- require.js 使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Async.js解决Node.js操作MySQL的回调大坑
因为JavaScript语言异步特性.在使用Node.js运行非常多操作时都会使用到回调函数,当中就包含訪问数据库.假设代码中的业务逻辑略微复杂一点,回调一层层嵌套.那么代码非常easy进入Callb ...
- zabbix agent shell一键安装脚本
#!/bin/bash basepath=$(cd ``; pwd) SHELL_DIR="${basepath}/shell" PACKAGE_DIR="${basep ...
- 重装系统后恢复wubi安装的Ubuntu(未实测)
wubi安装成功,但是后来windows系统重装了,如何修复ubuntu系统的引导?[另外完全可以复制别人的wubi安装的ubuntu,但是要放在同一个盘符下] 将X:/ubuntu/winboo ...
- 百度Echart3
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
- win10系统架构调用
操作系统模型 操作系统有两种模式: 用户模式 内核模式 当用户模式调用系统服务时,CPU执行一个特殊的指令以切换到内核模式(Ring0),当系统服务调用完成时,操作系统切换回用户模式(Ring3). ...
- Java的Executor框架和线程池实现原理
Java的Executor框架 1,Executor接口 public interface Executor { void execute(Runnable command); } Executor接 ...
- 非标准USBasp下载线烧录Arduino BootLoader的参数设置
本文仅适用于BootLoader损坏且买到国产“免驱USBasp下载线”导致Arduino IDE无法识别从而不能烧写的情况.是一种略显非主流的操作方式. 因为Arduino的IDE并不支持这种免驱的 ...