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. 1099 Build A Binary Search Tree (30 分)(查找二叉树)

    还是中序遍历建树 #include<bits/stdc++.h> using namespace std; ; struct node { int data; int L,R; }s[N] ...

  2. mongodb 部署

    安装mongodb-3.4 1)将安装包上传至服务器 2)对压缩文件进行解压 tar -zxvf mongodb-linux-x86_64-suse12-v3.4-latest.tar.gz 3)把解 ...

  3. Linux再谈互斥锁与条件变量

    原文地址:http://blog.chinaunix.net/uid-27164517-id-3282242.html pthread_cond_wait总和一个互斥锁结合使用.在调用pthread_ ...

  4. SQL 基础笔记(二):进阶查询

    本笔记整理自<SQL 基础教程>.<MySQL 必知必会>和网上资料.个人笔记不保证正确. 一.复杂查询 视图 将 SELECT 查询包装成一个虚拟表,该虚拟表就被称为视图.( ...

  5. iPhone:iOS界面,本地生成随机验证码

    本文博客,模仿杰瑞教育的一篇博文,并在它的基础上,进行了些许更改.同时在重写的过程中,对自己忽略的地方,进行了重新认识,受益匪浅.文章来源:http://www.cnblogs.com/jerehed ...

  6. HttpClient实现POST参数提交

    HttpClient client = new HttpClient(); //使用FormUrlEncodedContent做HttpContent var content = new FormUr ...

  7. 【BestCoder #48】

    与之前一样,秒刷A和B,然后就永远卡在了C B也因为少看一句话被Hunt掉了 说说C的做法吧(分块大法好 给定一个序列,每次询问区间l-r,求∑(ai^bi),其中bi是指ai在区间中的出现次数,ai ...

  8. 使用C#创建windows服务程序

    创建windows服务项目 一.创建服务 1.文件->新建->项目->windows桌面->windows服务,修改你要的项目名称.我这不改名,仍叫WindowsService ...

  9. AE中实现Control中的各种图形工具的方法

    添加命名空间 using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Controls; A类:前面有Controls 后面有tool的工具都可以用同一类的代码实现( ...

  10. ss安装教程

    https://teddysun.com/342.html 加速 wget –no-check-certificate https://github.com/teddysun/across/raw/m ...