• Map接口

  Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,key和value可以是任意类型的对象,能够实现根据key快速查找value。

  Map中的键值对以Entry类型的对象实例形式存在。

  键(key值)不可重复,value值可以。

  每个键最多只能映射到一个值,一个值可以对应多个键。

  Map接口提供了分别返回key值集合、value值集合以及Entry(键值对)集合的方法。Entry类是Map的一个内部类。

  Map支持泛型,形式如:Map<Key值类型,V值类型>

  • HashMap类

  HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现。

  HashMap中的Entry对象是无序排列的。

  Key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射

  MapTest.java

package com.test.collection;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set; public class MapTest {
public Map<String, Student> students; public MapTest() {
this.students = new HashMap<String, Student>();
} /**
* 添加
*/
public void testPut(){
Scanner console = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("输入学生ID:");
String studentId = console.next();
//判断该ID是否被占用
Student st = students.get(studentId);
if (st == null) {
//提示输入学生姓名
System.out.println("输入学生姓名:");
String studentName = console.next();
//创建学生对象
Student newStudent = new Student(studentId, studentName);
//通过调用students的put方法,添加ID-学生映射
students.put(studentId, newStudent);
System.out.println("成功添加学生:" + students.get(studentId).name);
} else {
System.out.println("该学生ID被占用");
continue;
}
}
}
/**
* 通过keySet方法遍历Map
*/
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.name);
}
}
}
/**
* 删除
*/
public void testRemove() {
Scanner console = new Scanner(System.in);
while (true) {
System.out.println("请输入要删除学生的ID:");
String studentId = console.next();
Student st = students.get(studentId);
if (st == null) {
System.out.println("该学生ID不存在");
continue;
}
students.remove(studentId);
System.out.println("成功删除学生:" + st.name);
break;
}
}
/**
* 通过entrySet方法遍历Map
*/
public void testEntrySet() {
Set<Entry<String, Student>> entrySet = students.entrySet();
System.out.println("总共有" + students.size() + "个学生");
for (Entry<String, Student> entry : entrySet) {
System.out.println("key值为:" + entry.getKey());
System.out.println("对应的value为:" + entry.getValue().name);
}
}
/**
* 修改
*/
public void testModify() {
System.out.println("请输入要修改的学生ID");
Scanner console = new Scanner(System.in);
while (true) {
String studentId = console.next();
Student st = students.get(studentId);
if (st == null) {
System.out.println("该学生ID不存在");
continue;
}
System.out.println("当前学生ID,所对应的学生为" + st.name);
System.out.println("请输入新的学生的姓名:");
String studentName = console.next();
students.put(studentId, new Student(studentId, studentName));
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();
}
}

  执行结果:

输入学生ID:

输入学生姓名:
Tom
成功添加学生:Tom
输入学生ID: 输入学生姓名:
Jack
成功添加学生:Jack
输入学生ID: 输入学生姓名:
Lucy
成功添加学生:Lucy
总共有3个学生
学生:Tom
学生:Jack
学生:Lucy
请输入要删除学生的ID: 该学生ID不存在
请输入要删除学生的ID: 成功删除学生:Lucy
总共有2个学生
key值为:
对应的value为:Tom
key值为:
对应的value为:Jack

 请输入要修改的学生ID
 2
 当前学生ID,所对应的学生为Jack
 请输入新的学生的姓名:
 Lisa
 修改成功
 总共有2个学生
 key值为:1
 对应的value为:Tom
 key值为:2
 对应的value为:Lisa

 

Java—集合框架Map的更多相关文章

  1. java集合框架——Map

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

  2. Java集合框架——Map接口

    第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...

  3. Java集合框架Map接口

    集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...

  4. JAVA集合框架 - Map接口

    Map 接口大致说明(jdk11): 整体介绍: 一个将键映射到值的(key-value)对象, 键值(key)不能重复, 每个键值只能影射一个对象(一一对应). 这个接口取代了Dictionary类 ...

  5. java集合框架map

    Map<K,V> K key V value Map集合:该集合存储键值对.一对一对往里存,而且要保证键的唯一性. 1,添加. 2,删除. 3,判断. 4,获取. Map |--Hasht ...

  6. Java集合框架—Map

    Map集合:该集合存储键值对.一对一对往里存.而且要保证键的唯一性. 1,添加. put(K key, V value)  putAll(Map<? extends K,? extends V& ...

  7. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  8. Java集合框架之map

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

  9. 【JAVA集合框架之Map】

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

随机推荐

  1. @staticmethod 和@classmethod区别

    python中@classmethod @staticmethod区别 Python中3种方式定义类方法, 常规方式, @classmethod修饰方式, @staticmethod修饰方式. cla ...

  2. flask中的蓝图 Blueprint

    模块化 随着flask程序越来越复杂,我们需要对程序进行模块化的处理,之前学习过python的模块化管理,于是针对一个简单的flask程序进行模块化处理 简单来说,Blueprint 是一个存储操作方 ...

  3. React笔记:ref注意事项

    [一]使用ref必须用在[类型式的组件]才起作用,用在[函数式的组件]是无效的. 下面这个例子用在了[函数式的组件]上,所以是无效的: function MyFunctionalComponent() ...

  4. Hibernate复合主键的注解

    [转自] http://blog.csdn.net/happylee6688/article/details/17636801 最近做项目用到了Hibernate框架,采用了纯面向对象的思想,使用OR ...

  5. vector与array之间转换,向量与数据之间转换

    一维数组: vector<int> a; int b[5] = {1,2,3,4,5}; a.push_back(b);   二维数组: b[5][6] = {1,2,3,4,5,6... ...

  6. eclipse F6和F8的问题

    # 首先大致说明一下F6和F8的作用: | 在debug模式下, F6的作用是跳到下一步,F8的作用是跳到下一个断点 # 情景: | 在eclipse以debug模式同时启动两个项目,并且两个项目都打 ...

  7. 案例48-crm练习利用spring管理service和dao层的对象

    1 导包 2 将 Service 对象以及 Dao 对象配置到 spring 容器 <?xml version="1.0" encoding="UTF-8" ...

  8. arcgis影像批量裁剪代码

    # -*- coding:utf-8 -*- # Name: ExtractByMask_Ex_02.py # Description: Extracts the cells of a raster ...

  9. mysql根据某个字段分组根据更新时间获取最新的记录

    我现在有一种统计表,要根据一个字段分组然后根据更新时间,每个分组获取最新的一条记录.命名感觉挺简单的一个需求,然而没什么思路,当然是问度娘了. 度娘的答案很统一,然而都不管用,都是报错的,不知道是不是 ...

  10. C++程序设计基础(1)程序的编译和执行

    注:读<程序员面试笔记>笔记总结 1.编译执行过程 1.1预处理: (1)所有以#开头的代码都属于预处理的范畴:#include,#define,#ifdef(#ifndef,#endif ...