Java—集合框架Map

  • Map接口

  Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,key和value可以是任意类型的对象,能够实现根据key快速查找value。

  Map中的键值对以Entry类型的对象实例形式存在。

  键(key值)不可重复,value值可以。

  每个键最多只能映射到一个值,一个值可以对应多个键。

  Map接口提供了分别返回key值集合、value值集合以及Entry(键值对)集合的方法。Entry类是Map的一个内部类。

  Map支持泛型,形式如:Map<Key值类型,V值类型>

  • HashMap类

  HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现。

  HashMap中的Entry对象是无序排列的。

  Key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射

  MapTest.java

package com.test.collection;

import java.util.HashMap;
import java.util.HashSet;
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(){
        Scanner console = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("输入学生ID:");
            String studentId = console.next();
            //判断该ID是否被占用
            Student st = students.get(studentId);
            if (st == null) {
                //提示输入学生姓名
                System.out.println("输入学生姓名:");
                String studentName = console.next();
                //创建学生对象
                Student newStudent = new Student(studentId, studentName);
                //通过调用students的put方法,添加ID-学生映射
                students.put(studentId, newStudent);
                System.out.println("成功添加学生:" + students.get(studentId).name);
            } else {
                System.out.println("该学生ID被占用");
                continue;
            }
        }
    }
    /**
     * 通过keySet方法遍历Map
     */
    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);
            }
        } 
    }
    /**
     * 删除
     */
    public void testRemove() {
        Scanner console = new Scanner(System.in);
        while (true) {
            System.out.println("请输入要删除学生的ID:");
            String studentId = console.next();
            Student st = students.get(studentId);
            if (st == null) {
                System.out.println("该学生ID不存在");
                continue;
            }
            students.remove(studentId);
            System.out.println("成功删除学生:" + st.name);
            break;
        }
    }
    /**
     * 通过entrySet方法遍历Map
     */
    public void testEntrySet() {
        Set<Entry<String, Student>> entrySet = students.entrySet();
        System.out.println("总共有" + students.size() + "个学生");
        for (Entry<String, Student> entry : entrySet) {
            System.out.println("key值为:" + entry.getKey());
            System.out.println("对应的value为:" + entry.getValue().name);
        }
    }
    /**
     * 修改
     */
    public void testModify() {
        System.out.println("请输入要修改的学生ID");
        Scanner console = new Scanner(System.in);
        while (true) {
            String studentId = console.next();
            Student st = students.get(studentId);
            if (st == null) {
                System.out.println("该学生ID不存在");
                continue;
            }
            System.out.println("当前学生ID,所对应的学生为" + st.name);
            System.out.println("请输入新的学生的姓名:");
            String studentName = console.next();
            students.put(studentId, new Student(studentId, studentName));
            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:
3
输入学生姓名:
Lucy
成功添加学生:Lucy
总共有3个学生
学生:Tom
学生:Jack
学生:Lucy
请输入要删除学生的ID:
12
该学生ID不存在
请输入要删除学生的ID:
3
成功删除学生:Lucy
总共有2个学生 key值为:
1 对应的value为:Tom key值为:2 对应的value为:Jack

 请输入要修改的学生ID
 2
 当前学生ID,所对应的学生为Jack
 请输入新的学生的姓名:
 Lisa
 修改成功
 总共有2个学生
 key值为:1
 对应的value为:Tom
 key值为:2
 对应的value为:Lisa

 

原文地址:https://www.cnblogs.com/tianxintian22/p/6691014.html