集合框架(中):Map
Map接口:
- Map提供了一种映射关系,其中的元素就是以键值对(key-value)的形式存储的,能够实现根据key快速查找value
- Map中的键值对以Entry类型的对象实例形式存在
- 键(key值)不可重复,value值也可以
- 每个键最多只能映射到一个值
- Map接口提供了分别返回key值集合,value值集合以及Entry(键值对)集合的方法
- Map支持泛型,形式如:Map<k,v>
HashMap类
- HashMap是Map的一个重要的实现类,也是最常用的,基于哈希表实现
- HashMap中的Entry对象是无序排列的
- key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射(key值不可以重复)
例子:通过添加学生到学生库中,并显示学生信息
Students类
package com.collection; import java.util.HashSet;
import java.util.Set; /**
* @学生类
*
*/ public class Student { public String id;
public String name;
public Set<Course> courses;
public Student(String id,String name)
{
this.id=id;
this.name=name;
this.courses=new HashSet<Course>();
} }
1.MapTest类
添加信息
package com.collection; import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set; public class MapTest { /**
* @param args
*/ //用来承装学生类型的对象
public Map<String,Student> students; //构造器中初始化students数属性
public MapTest(){
students = new HashMap<String,Student>();
} /**
*测试添加:输入学生ID,判断是否被占用
*若未被占用,则输入学生姓名,创建学生对象,并且
*添加到students中
*/
public void testPut(){
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 newStudent = new Student(ID,name);
//通过调用students的put方法,添加ID-学生映射
students.put(ID, newStudent);
System.out.println("成功添加学生:"+students.get(ID).name);
i++;
}else{
System.out.println("该学生ID已被占用");
continue;
}
}
} //测试Map的keySet方法
public void testKeySet(){
//通过keySet方法,返回Map中所有“键”的Set集合
Set<String> keyset = students.keySet();
//取得students容量
System.out.println("总共有:"+students.size()+"个学生");
//遍历keyset取得每一个键,再调用get方法,得到每个键对应得value值
for (String stuId : keyset) {
Student st = students.get(stuId);
if(st!=null){
System.out.println("学生信息:"+st.id+"_"+st.name);
}
}
} public static void main(String[] args) {
// TODO 自动生成的方法存根
MapTest mt = new MapTest();
mt.testPut();
mt.testKeySet(); } }
注:HashMap是无序的。所以每次运行显示学生信息的时候,可能都是不一样的
2.删除Map中的映射,并是使用entrySet 方法遍历输出
package com.collection; import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set; public class MapTest { /**
* @param args
*/ //用来承装学生类型的对象
public Map<String,Student> students; //构造器中初始化students数属性
public MapTest(){
students = new HashMap<String,Student>();
} /**
*测试添加:输入学生ID,判断是否被占用
*若未被占用,则输入学生姓名,创建学生对象,并且
*添加到students中
*/
public void testPut(){
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 newStudent = new Student(ID,name);
//通过调用students的put方法,添加ID-学生映射
students.put(ID, newStudent);
System.out.println("成功添加学生:"+students.get(ID).name);
i++;
}else{
System.out.println("该学生ID已被占用");
continue;
}
}
} //测试Map的keySet方法
public void testKeySet(){
//通过keySet方法,返回Map中所有“键”的Set集合
Set<String> keyset = students.keySet();
//取得students容量
System.out.println("总共有:"+students.size()+"个学生");
//遍历keyset取得每一个键,再调用get方法,得到每个键对应得value值
for (String stuId : keyset) {
Student st = students.get(stuId);
if(st!=null){
System.out.println("学生信息:"+st.id+"_"+st.name);
}
}
}
//测试删除map中的映射
public void testRemove(){ //从键盘中获得输入的ID
Scanner console = new Scanner(System.in); while(true){
//提示输入学生ID;
System.out.println("输入要删除学生的ID");
String ID = console.next();
Student st = students.get(ID);
if(st==null){
System.out.println("该学生ID不存在");
continue;
}
students.remove(ID);
System.out.println("成功删除学生:"+st.name);
break;
} } //通过entrySet方法遍历Map
public void testEntrySet(){
Set<Entry<String,Student>> entryset = students.entrySet();
for (Entry<String, Student> entry : entryset) {
System.out.println("删除后取得键:"+entry.getKey());
System.out.println("删除后取得键对应得值为"+entry.getValue().name); }
} public static void main(String[] args) {
// TODO 自动生成的方法存根
MapTest mt = new MapTest();
mt.testPut();
mt.testKeySet();
mt.testRemove();
mt.testEntrySet(); } }
3.修改Map中的映射
//利用put方法修改Map中的映射
public void testModify(){
System.out.println("请输入需要修改学生的ID");
Scanner console = new Scanner(System.in); while(true){
String stuID = console.next();
Student stu = students.get(stuID);
if(stu==null){
System.out.println("该ID不存在,请重新输入");
continue;
}
//提示输入修改前学生的姓名
System.out.println("原来的学生的姓名"+stu.name);
//提示输入新的学生的姓名
System.out.println("请输入新的学生姓名");
String name = console.next();
Student newStudent = new Student(stuID,name);
students.put(stuID, newStudent);
System.out.println("修改成功");
break; }
}
在mian方法中执行
public static void main(String[] args) {
// TODO 自动生成的方法存根
MapTest mt = new MapTest();
mt.testPut();
mt.testKeySet();
//mt.testRemove();
//mt.testEntrySet();
mt.testModify();
mt.testEntrySet(); }
集合框架(中):Map的更多相关文章
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 第19章 集合框架(3)-Map接口
第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...
- 【JAVA集合框架之Map】
一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...
- [黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)
---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. 集合框架按其所实现的接口, 大 ...
- Java集合框架之Map接口浅析
Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...
- Java集合框架之map
Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...
- 第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 有序 ...
随机推荐
- 【DNS】DNS的几个基本概念
一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯. 根域服 ...
- IE8专用hack
众所周知,ie6.7的hack直接用*即可,但是ie8的话就比较麻烦,在做半透明背景的时候,为了兼容ie6.7,可以为其设置纯色,但是ie8也同样不支持半透明,需要单独为它设置纯色背景.下面的兼容代码 ...
- mongo基本命令
> show dbs -- 查看数据库列表 > use admin --创建admin数据库,如果存在admin数据库则使用admin数据库 > db ---显示当前使 ...
- gulp实时刷新页面
需要安装nodejs 全局安装gulp cnpm install -g gulp 局部安装 cnpm install -save-dev gulp 添加配置文件,新建gulpfile.js var g ...
- 添加对WCF的调用(内网状态下)。
在能连接到内网的电脑上,运行SvcUtil.exe工具即可. 如打开文件后闪退,则可打开cmd后,将文件拖入到cmd中,然后再加上文件的地址.
- POJ3680:Intervals(离散化+最大流最小费用)
Intervals Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9320 Accepted: 4014 题目链接:ht ...
- vue-cli脚手架的.babelrc文件
虽然es6还没被浏览器全部支持,但是使用es6是大势所趋,所以babel应运而生将es6代码转换成浏览器能够识别的代码 什么是.babelrc文件呢? 熟悉linux的同学一定知道,rc结尾的文件通常 ...
- "todoList妙味"学习总结
1.v-bind 主要用于属性绑定 :class="{completed: item.isChecked}",它会将{}里面的内容解析为js表达式 2.vue提供了一组方法, ...
- bzoj3638 Cf172 k-Maximum Subsequence Sum
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3638 [题解] 看到k<=20就感觉很py了啊 我们用一棵线段树维护选段的过程,能选到 ...
- C#操作windows事件日志项
/// <summary> /// 指定事件日志项的事件类型 /// </summary> public enum EventLogLevel { /// <summar ...