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. js 弹性导航

    <style> *{margin:0;padding:0;} #box{height:50px;float:left;position:relative;background:#f90;} ...

  2. C++类的构造函数及定义

    定义一个普通的类时,一定要定义它自己的构造函数.原因有三:第一个原因是编译器只有在发现类不包含任何构造函数的情况下才会替我们生成一个默认的构造函数,一旦我们定义了一些其他的构造函数,那么除非我们再定义 ...

  3. (转).NET技术大系概览 (迄今为止最全的.NET技术栈)

    前言 .Net推出13年了,Visual Studio 2015 / .NET Framework 4.6昨天也发布了. 从2002年的.NET 1.0开始,1.1,2.x,3.x,4.x,每个新版本 ...

  4. ubuntu 16.04通过源码方式安装nginx

    1.下载nginx源码包 wget  http://nginx.org/download/nginx-1.11.12.tar.gz 2.解压该tar包 tar zxvf nginx-1.11.12.t ...

  5. preg_match 与 preg_match_all

    案例一: <?php $str = 'abcdef123456'; preg_match('/[a-z1-9]+/', $str, $res); var_dump($res); preg_mat ...

  6. centos7.x设置nginx开机自启动

    设置nginx开机自启动(centos7.x) 第一步:进入到/lib/systemd/system/目录 [root@iz2z init.d]# cd /lib/systemd/system/ 第二 ...

  7. GANS--理解

    GAN所建立的一个学习框架,实际上就是生成模型和判别模型之间的一个模仿游戏.生成模型的目的,就是要尽量去模仿.建模和学习真实数据的分布规律:而判别模型则是要判别自己所得到的一个输入数据,究竟是来自于真 ...

  8. 使用 DL4J 训练中文词向量

    目录 使用 DL4J 训练中文词向量 1 预处理 2 训练 3 调用 附录 - maven 依赖 使用 DL4J 训练中文词向量 1 预处理 对中文语料的预处理,主要包括:分词.去停用词以及一些根据实 ...

  9. Tomcat源码分析——请求原理分析(上)

    前言 谈起Tomcat的诞生,最早可以追溯到1995年.近20年来,Tomcat始终是使用最广泛的Web服务器,由于其使用Java语言开发,所以广为Java程序员所熟悉.很多人早期的J2EE项目,由程 ...

  10. 移动端使用的WebKit私有属性(转)

    <!DOCTYPE HTML><html><head> <meta charset="utf-8"> <title>无标 ...