Java集合框架(中)
2016-07-01 10:39
393 查看
Map和HashMap
Map接口:在了解Map接口之前,先要明确映射的概念:设A、B是两个非空集合,如果存在一个法则f,使得对A中的每个元素a,按法则f,在B中有唯一确定的元素b与之对应,则称f为从A到B的映射,记作f:A→B。
Map提供了一种映射关系,其中的元素是以键值对Key—Value的形式存储的,能够实现根据Key快速查找Value
Map中的键值对以Entry类型的对象实例形式存在
键(Key)不可以重复,值(Value)可以重复
每个键最多只能映射到一个值
Map接口提供了分别返回Key值集合,Value值集合以及Entry(键值对)集合的方法
Map支持泛型,形式如Key—Value
HashMap类:
HashMap是Map一个重要实现类,也是最常用的,基于哈希表实现
HashMap中的Entry对象是无序排列的
Key与Value都可以为null,但是一个HashMap只能有一个Key为null的映射(Key不可以重复)
Map增删改查(MapTest.java):
package com.imooc.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 { public Map<String,Student> students; public MapTest(){ this.students = new HashMap<String, Student>(); } public void testPut(){//往Map中添加元素 Scanner sc = new Scanner(System.in); for(int i=0;i<3;i++){ System.out.println("请输入学生id:"); String id = sc.next(); //判断该id是否被占用 //Map的get(Key)方法,如果存在,返回相应的Value;如果不存在,返回一个空对象 Student stu = students.get(id); if(stu==null){ System.out.println("输入学生姓名以创建学生:"); String name = sc.next(); Student newStu = new Student(id,name); students.put(id, newStu); //Map的put(Key,Value)方法,将键值对加入到Map中 System.out.println("成功添加学生:"+students.get(id).name); } else{ System.out.println("该学生id已被占用!"); } } } public void testKeySet(){//遍历查询Map //Map的keySet()方法,返回Map中所有键(Key)的Set集合 Set<String> keySet = students.keySet(); System.out.println("总共有"+students.size()+"个学生"); for(String stuId:keySet){//遍历查询keySet Student stu = students.get(stuId); if(stu!=null){ System.out.println("学生:"+stu.name); } } } public void testRemove(){ //删除Map中已有映射(键值对) Scanner sc = new Scanner(System.in); while(true){ System.out.println("请输入要删除的学生id:"); String id = sc.next(); Student stu = students.get(id); if(stu==null){ System.out.println("该学生id不存在"); continue; } //Removes the mapping for a key from this map if it is present students.remove(id);//Map的remove(Key)方法,删除已有键值对 System.out.println("成功删除学生:"+stu.name); break; } } public void testEntrySet(){ //Map的entrySet()方法,返回Map中所有键值对的Set集合 //Entry是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); } } //利用Map的put()方法修改Map中已有的映射(键值对) public void testModify(){ System.out.println("请输入要修改的学生id:"); Scanner sc = new Scanner(System.in); while(true){ String id = sc.next(); Student stu = students.get(id); if(stu==null){ System.out.println("该id不存在,请重新输入!"); continue; } System.out.println("当前id所对应学生的姓名为:"+stu.name); System.out.println("请输入新的学生姓名:"); String name = sc.next(); Student newStu = new Student(id,name);//新建学生对象 students.put(id, newStu); 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:
1
输入学生姓名以创建学生:
Tom
成功添加学生:Tom
请输入学生id:
2
输入学生姓名以创建学生:
Jack
成功添加学生:Jack
请输入学生id:
4
输入学生姓名以创建学生:
Kings
成功添加学生:Kings
总共有3个学生
学生:Tom
学生:Jack
学生:Kings
请输入要删除的学生id:
3
该学生id不存在
请输入要删除的学生id:
1
成功删除学生:Tom
取得键:2
对应的值为:Jack
取得键:4
对应的值为:Kings
请输入要修改的学生id:
4
当前id所对应学生的姓名为:Kings
请输入新的学生姓名:
Hill
修改成功!
取得键:2
对应的值为:Jack
取得键:4
对应的值为:Hill
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android Google Map获取地理位置信息的方法
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- Spark RDD API详解(一) Map和Reduce
- PropertyChangeListener简单理解
- c语言实现hashmap(转载)
- Python中map()函数浅析
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序