您的位置:首页 > 编程语言 > Java开发

Java 集合框架 Map

2016-09-07 08:54 447 查看
Map 接口

Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value
Map中的键值对以Entry类型的对象实例形式存在的
key值不能重复,value值可以
每个key只能映射到一个值,但value可以对应很多key
Map接口提供了分别返回key值集合,value值集合以及Entry(键值对)集合的方法
Map支持泛型,形式如  Map<K,V>

HashMap类

HashMap 是Map的一个重要实现类,也是最常用的,基于哈希表实现
HashMap中的Entry对象是无序排列的
Key值和value值都可以为null,但是一个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 {

/*
* 用来承装学生类型对象
*/
public Map<String, Student> students;

/*
* 构造器中初始化students属性
*/
public MapTest(){
this.students=new HashMap<String,Student>();
}
/*
* 测试增加方法,输入学生ID,判断是否被占用,若没有则输入姓名,创建新学生对象,并且添加到students中
*/
public void TestPut(){
Scanner input=new Scanner(System.in);
int i=0;
while(i<3){
System.out.println("请输入学生ID: ");
String ID=input.next();
//判断该ID是否被占用
Student st=students.get(ID);
if(st==null){
//提示输入学生姓名
System.out.println("请输入学生姓名: ");
String name=input.next();
//创建学生对象
Student newst=new Student(ID, name);
//通过调用students的put方法,添加ID学生映射
students.put(ID,newst);
System.out.println("成功添加: "+students.get(ID).name);
i++;
}else{
System.out.println("该学生ID已被占用");
continue;
}
}
}
/*
* 测试Map的keySet方法
*/
public void testKeySet(){
//通过keySet方法返回Map中所有键的集合
Set<String> keySet=students.keySet();
//取得studends的容量
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
while(true){
System.out.println("请输入要删除的学生ID: ");
Scanner input=new Scanner(System.in);
String ID= input.next();
//判断该ID是否有对应的学生对象
Student st=students.get(ID);
if(st==null){
System.out.println("输入ID不存在");
continue;
}
students.remove(ID);
System.out.println("成功删除 "+st.name);
break;
}
}
/*
* entrySet方法遍历
*/
public void testEntrySet(){
//返回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 input=new Scanner(System.in);
while(true){
String stuID=input.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=input.next();
Student newstu=new Student(stuID, name);
students.put(stuID,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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: