集合框架(中):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 有序 ...
随机推荐
- PHP vscode+XDebug 远程断点调试服务器上的代码
对于简单的项目或仅仅想知道某一位置的某个变量是什么值,直接使用var_dump配置exit来打印和中断就可以了,方便又快捷, 而对于大型项目的调试,或想了解某个系统的整个运行过程,xdebug可能会是 ...
- scrapy图片-爬取哈利波特壁纸
话不多说,直接开始,直接放上整个程序过程 1.创建工程和生成spiders就不用说了,会用scrapy的都知道. 2.items.py class HarryItem(scrapy.Item): # ...
- HttpRuntime.Cache再学习
摘抄: 可以看到:读缓存,其实是在调用Get方法,而写缓存则是在调用Insert方法的最简单的那个重载版本. 注意了:Add方法也可以将一个对象放入缓存,这个方法有7个参数,而Insert也有一个签名 ...
- Scala 基础(4)—— 类和对象
1. 类.字段和方法 Scala 用 class 关键字定义类,一旦定义好一个类,就可以使用 new 关键字创建对象. Scala 使用 new 调用无参构造器时,可以不使用 (),推荐不使用括号: ...
- NativeScript Vue 和 Weex 对比与分析
Weex Weex是一个项目,由阿里巴巴创造.它的口号是“一次编写,到处运行”,这意味着你可以使用完全相同的代码库构建网站(HTML5),Android和iOS的应用.目前有几个Weex的生产项目,在 ...
- [AGC011E] Increasing Numbers [数学]
题面 传送门 思路 首先,我们观察一下上升数的性质 可以发现,它一定可以表示为最多9个全是1的数字的和 那么我们设$N$可以被表示成$k$个上升数的和,同时我们设$p_i=\underbrace{11 ...
- 强军如歌(strong)
强军如歌(strong) 题目描述 给定一个NN个数的序列AA,如果序列AA不是非降序的,你需要在其中选择一个数删掉,不断重复这个操作直到序列AA非降.求有多少种不同的删数方案.注意:删掉的数的集合相 ...
- 转:LinkedHashMap使用(可以用来实现LRU缓存)
1. LinkedHashMap概述: LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap. LinkedH ...
- em,rem
em rem 相对单位: 也可用于设置padding line-height等em相对当前容器的默认字体设置比如,所有浏览器默认字体都是16px,body{ font-size:62.5%}以后即1 ...
- 让Vs2010支持 Css3+HTML5
第一步. 先到微软官方下载一个 Microsoft Visual Studio 2010 sp1 . 给传送门:.microsoft.com/downloads/zh-cn/details.aspx? ...