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的更多相关文章

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

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

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

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

  3. 第19章 集合框架(3)-Map接口

    第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...

  4. 【JAVA集合框架之Map】

    一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...

  5. [黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)

    ---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. 集合框架按其所实现的接口, 大 ...

  6. Java集合框架之Map接口浅析

    Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...

  7. Java集合框架之map

    Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...

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

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

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

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

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

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

随机推荐

  1. iterm2+vim使用

    iterm2+vim 终端切换为iterm2+zsh+oh my zsh,确实好用. I term2常用快捷键记录 新建标签:cmd+t 关闭标签:cmd+w 切换标签:cmd+数字, 切换全屏:cm ...

  2. 【Android】Android中期项目设计题目-界面设计小作业-提交截止时间2016.4.8

    评选三份作品,请发关于app运行界面截图的博客.

  3. 第一次使用iptables

    sudo iptables -A OUTPUT -m cgroup ! --cgroup 0x100001 -j DROP 第一次使用iptables就把电脑弄得上不了网了...... 下面这个地址讲 ...

  4. BZOJ 2438:杀人游戏(tarjan+概率)

    杀人游戏Description一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, ...

  5. BZOJ1055[HAOI2008]玩具取名 【区间dp + 记忆化搜索】

    题目 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够 ...

  6. bzoj 2618 半平面交模板+学习笔记

    题目大意 给你n个凸多边形,求多边形的交的面积 分析 题意\(=\)给你一堆边,让你求半平面交的面积 做法 半平面交模板 1.定义半平面为向量的左侧 2.将所有向量的起点放到一个中心,以中心参照进行逆 ...

  7. Spring和ActiveMQ集成实现队列消息以及PUB/SUB模型

    前言:本文是基于Spring和ActiveMQ的一个示例文章,包括了Point-To-Point的异步队列消息和PUB/SUB(发布/订阅)模型,只是做了比较简单的实现,无任何业务方面的东西,作为一个 ...

  8. 图表绘制工具--Matplotlib 3

    ''' [课程3.] 表格样式创建 表格视觉样式:Dataframe.style → 返回pandas.Styler对象的属性,具有格式化和显示Dataframe的有用方法 样式创建: ① Style ...

  9. POJ 2676 数独+dfs深搜

    数独 #include "cstdio" #include "cstring" #include "cstdlib" #include &q ...

  10. HDU1892 See you~

    Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission( ...