Map和HashMap

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值都是可以为unll的,但是一个HashMap只能有一个
key值为null的映射(key值不可以重复)

案列功能说明

通过Map<String,Student>进行学生信息管理
其中key值为学生的ID,value为学生的对象

  通过键盘输入学生信息

  对集合中的学生信息进行增,删,改,查操作

 import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set; public class MapTest { // 用来承装学生类型对象 // 这里的Student为上次写的Student类 (参考Java之集合框架上(9))
public Map<String, Student> students;
// 在构造器中初始化students属性
public MapTest(){
this.students = new HashMap<String, Student>();
} /*
* 测试添加:输入学生ID,判断是否被占用
* 若未被占用,则输入姓名,创建学生对象,并且
* 添加到students中
*/
public void testPut(){
// 创建一个Scanner对象,用来获取输入的学生ID和姓名
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.name);
}
}
} // 测试删除Map中已有的映射
public void testRemove(){
// 获取从键盘输入的待删除学生ID字符串
Scanner console = new Scanner(System.in);
while(true){
// 提示输入待删除的学生的ID
System.out.println("请输入要删除的学生ID!");
String ID = console.next();
// 判断ID是否有对应的学生对象
Student st = students.get(ID);
if (st == null){
// 提示输入的ID并不存在
System.out.println("该ID不存在!");
continue;
}
students.remove(ID);
System.out.println("成功删除学生:" + st.name);
break;
}
} // 通过entrySet方法来遍历Map
public void testEntrySet(){
// 通过entrySet方法,返回Map中的所有键值对
Set<Entry <String,Student>> entrySet = students.entrySet();
for (Entry<String, Student> entry:entrySet){
System.out.println("取得键:" + entry.getKey());
System.out.println("对应的值:" + entry.getValue().name); }
} // 利用put方法修改Map中已有映射
public void testModify(){
// 提示输入要修改的学生ID
System.out.println("请输入要修改的学生ID:");
// 创建一个Scanner对象,去获取从键盘上输入的学生ID字符串
Scanner console = new Scanner(System.in);
while (true ){
// 取得从键盘输入的学生ID
String stuID = console.next();
// 从students中查找该学生ID对应学生对象
Student student = students.get(stuID);
if (student == null){
System.out.println("该ID不存在!请从新输入!");
continue;
}
// 提示当前对应学生对象的姓名
System.out.println("当前学生ID,所对应的学生为:" + student.name);
// 提示输入新的学生姓名,来修改已有映射
System.out.println("请输入新的学生姓名:");
String name = console.next();
Student newStudent = new Student(stuID,name);
students.put(stuID, newStudent);
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();
} }

Java 之集合框架 中(10)的更多相关文章

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

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

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

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

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

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

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

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

  5. 详解Java的MyBatis框架中SQL语句映射部分的编写

    这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...

  6. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  7. Java的集合框架综述

    集合 用于存储和管理数据的实体被称为数据结构(data structure).数据结构可用于实现具有不同特性的集合对象,这里所说的集合对象可以看作一类用于存储数据的特殊对象. 集合内部可以采用某种数据 ...

  8. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  9. Java的集合框架

    01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...

随机推荐

  1. java四行代码实现图片下载

    如下: InputStream in = new URL("http://www.updown/thumbnail.jpg).openStream(); Path temp = Paths. ...

  2. 分享一个电子发票信息提取工具(Python)

    电子发票太多,想统计下总额异常困难,网上工具不好用,花了2个小时实现一份,测试过中石油.京东开具的电子发票还行,部分发票名称失败有问题不影响统计,有需要的小伙伴自己拿去改吧. import cmd i ...

  3. lightgbm调参方法

    gridsearchcv: https://www.cnblogs.com/bjwu/p/9307344.html gridsearchcv+lightgbm cv函数调参: https://www. ...

  4. js实现瀑布流布局

    window.onload = function () { var d1 = new Waterfall(); d1.init();};//构造函数function Waterfall() { thi ...

  5. sqlplus 调试存储过程

    SQLPLUS里测试带返回参数的存储过程过程名p_test入参 aa varchar2出参 bb sys_refcursor 在SQLPLUS里如何将sys_refcursor 这个结果集获取出来呢 ...

  6. CSS选择器详解(二)通用选择器和高级选择器

    目录 通用选择器 高级选择器 子选择器 相邻兄弟选择器 属性选择器 通用选择器 通用选择器可以选择页面上的所有元素,并对它们应用样式,用 * 来表示. 语法: * { property1: value ...

  7. Entity Framework 6.0 Code First(转)

    源自:http://www.cnblogs.com/panchunting/tag/Code%20First/ 1 Conventions 2 Custom Conventions 3 Data An ...

  8. PHP OOP面向对象部分方法归总(代码实例子)

    <?php//对象名存在栈内存中,数据存在堆内存中class leyangjun{    var $name;  //定义变量    var $age;    var $sex;         ...

  9. 深度为君剖析CTO、技术总监、首席架构师的区别

      CTO.技术总监.首席架构师的区别 经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个 ...

  10. [转]MVC Razor模板引擎 @RenderBody、@RenderPage、@RenderSection及Html.RenderPartial、Html.RenderAction

    本文参考自下面文章整理 MVC Razor模板引擎 @RenderBody.@RenderPage.@RenderSection及Html.RenderPartial.Html.RenderActio ...