Map接口:
之前有说过,Collection 里面存的都是一个个的元素,就仿佛如单身,而Map 中存的都是一对一对的,他们是已键值对的形式存储一个关键字Key 和他对应的值Value,我们一般可以根据Key 就快速的找到对应的Value 值。
对于键值对来说他有如下的特点:
(1)键值对的类型为Entry 。
(2)键值对中 Key 不可以重复但是Value 可以重复。
(3)对于一个Key 只能映射到一个Value ,但是Value确可以指向多个Key。每一个键最多只能映射到一个Value 。
(4)Map 提供了多种接口,可以进行不同类型值得返回,并且Map也支持泛型Map<K,V>。
HashMap 实现类:
HashMap 是基于哈希表实现的,在他之中的entry 是无序排列的。
在HashMap中 Key 和Value 值都可以为null,但是只能有一个为Key 为null的映射即就是Key值不可以在重复。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.Map.Entry;
public class MapTest {
/**
* MapTest类,来测试Map 的添加和删除的方法
*/
public Map<String,Student> students=new HashMap<String, Student>();
/**
* 用来测试添加:
* 输入ID 号,看是否存在此ID 的学生,如果存在打印输出,
* 如果不存在就添加进去。
*/
public void MapAddTest(){
Scanner console=new Scanner(System.in);
for(int i=0;i<3;){
System.out.println("请输入学生ID:");
String Id=console.next();
Student stu=students.get(Id);
if(stu==null){
System.out.println("没有查到此学生,请输入学生姓名");
String name=console.next();
Student newstudent=new Student(Id,name);
students.put(Id, newstudent);
System.out.println("成功添加学生"+newstudent.name);
i++;
}
else{
System.out.println("此学生为存在");
}
}
}
/**
* 测试Map 的删除方法
*
*/
public void MapRemove(){
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("待删除学生不存在");
continue;
}
System.out.println("准备删除");
students.remove(Id);
System.out.println("已删除");
break;
}
}
/**
* 测试MapSet方法用于循环输出Map 中的值
*
*/
public void MapKeySet(){
//首先通过keySet方法,返回Map中所有键的集合
Set<String> key=students.keySet();
// 循环遍历
for(String id:key){
Student st=students.get(id);
System.out.println("id:"+st.id+"name:"+st.name);
}
}
/**
* 测试entrySet 遍历输出Map 方法
* @param args
*/
public void MapEntrySet(){
Set< Entry <String,Student>> entrset=students.entrySet();
for(Entry<String,Student> entry:entrset){
System.out.println("键:"+entry.getKey());
System.out.println("值:"+"id "+entry.getValue().id+" "+"name "+entry.getValue().name);
}
}
public static void main(String[] args) {
MapTest mt=new MapTest();
mt.MapAddTest();
mt.MapKeySet();
mt.MapRemove();
mt.MapEntrySet();
}
}