Java 学习之集合框架---Map

Java Map接口与HashMap实现详解
本文详细介绍了Java中Map接口及其子类HashMap的基本概念、特点、操作方法和使用示例,包括键值对的存储方式、键值的类型限制、键的唯一性与值的重复性等特性。并通过实例展示了如何添加、删除、遍历Map中的键值对。

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();
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值